匿名类型出现在两个错误中

问题描述 投票:0回答:5

我有一个 linq 查询,用于填充

GridView
上的
Page_Load
。我为字母表制作了一个
for
字符循环。在填充
.Command
LinkButton
LinkButton
中,我使用查询中的相同参数运行非常相似的查询,并收到以下错误。

类型“<>f__AnonymousType2”同时存在于“ConcernContracts.dll”和“System.Web.WebPages.Deployment.dll”中

void lnkCharacter_Command(object sender, CommandEventArgs e)
{
    try
    {
        var lbtn = (LinkButton)lbl_Alphabet.FindControl("lnkCharacter" + e.CommandArgument);
        var id = lbtn.Text;

        using (var db = new dbDataContext())
        {
            var query = from n in db.tbl_Providers
                        where ((n.provider_Name.StartsWith(id)) && (n.provider_Deleted == false))
                        select new
                        {
                            n.ProviderId,
                            n.provider_Name
                        };

            grd_Provider.DataSource = null;
            grd_Provider.DataSource = query;
            grd_Provider.DataBind();
        }
    }
    catch (SystemException ex) { }
}

LoadGrid() 是相同的,但它不使用

.StartsWith()
条件。 您有任何解决该错误的想法吗?

该错误不会引发异常,但不会填充任一查询的网格。在以下行中发现了错误:

grd_Provider.DataSource = query;

c# asp.net linq
5个回答
2
投票

更改网格数据源

grd_Provider.DataSource = query.ToList();
grd_Provider.DataBind();

或创建具有两个属性 Provider Id 和 Name 的列表,并从输出绑定该列表 像这样。

 List<Entities> abc=query.ToList();
 grd_Provider.DataSource =abc;
 grd_Provider.DataBind();

1
投票

这里有一个建议:

您的两个相似的查询可能与您在 LINQ 查询中选择的匿名类型重叠。在一个且仅一个查询中,将 select new 更改为如下所示:

select new
       {
         Id = n.ProviderId,
         Name = n.provider_Name
       };

如果您这样做,匿名类型不应再发生冲突,因为您不修改的类型将使用默认名称。

祝你好运,我希望这会有所帮助!


0
投票

我遇到了同样的问题,我向匿名类型添加了另一个属性并解决了这个问题。


0
投票

将其转换为

List
IEnumerable
,您只是无法将匿名对象作为 datasource 传递给 gridview。
query.ToList();

您可以将返回类型转换为

IEnumerable<object>

它可以保存任何匿名类型并可以轻松绑定为数据源


-1
投票

Linq 不支持某些功能,例如 .toDays()、.addDays()、.StartsWith() 。所以你需要做的是,首先不使用 .StartsWith() 获取结果,然后尝试应用一些功能来过滤结果 StartsWith 特定 id。

© www.soinside.com 2019 - 2024. All rights reserved.