【问题标题】:Anonymous Type Appears in both Error匿名类型出现在两个错误中
【发布时间】:2013-03-05 14:57:24
【问题描述】:

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

类型“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;

【问题讨论】:

  • 项目是否在同一个解决方案中?它们有相同的命名空间吗?
  • 重建、清理、构建。
  • 是的,它们在同一个解决方案中。查询在同一页面上。
  • 同意前面的,添加命名空间 - 如果这是一个 Web 项目,您可能需要在执行此操作时将代码移动到 app_code 文件夹。另外 - 顺便说一句,我会删除空的 catch 语句,这不是一个好主意。如果您发现错误,请对它们进行处理 - 提醒用户或至少将它们记录在某个地方等。

标签: c# asp.net linq


【解决方案1】:

更改您的网格数据源

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

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

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

【讨论】:

    【解决方案2】:

    这是一个建议:

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

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

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

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

    【讨论】:

    • 我在页面上创建了另一个网格并尝试填充该网格,但它也不起作用。我想知道是不是查询已经在LoadGrid() 上运行,这就是为什么没有填充。我需要一种不同的方式来实现这个过滤器。
    【解决方案3】:

    将其转换为ListIEnumberable,您只是不能将匿名对象作为数据源 传递给gridview。 query.ToList();

    您可以将返回类型转换为

    IEnumerable<object>
    

    它可以保存任何匿名类型,并且很容易绑定为数据源

    【讨论】:

    • 你能解释一下吗? Linq is IEnumerable.The term "LINQ to Objects" refers to the use of LINQ queries with any IEnumerable or IEnumerable&lt;T&gt; collection directly
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 2023-03-16
        • 2014-02-24
        • 1970-01-01
        • 1970-01-01
        • 2013-06-19
        相关资源
        最近更新 更多