当我放置 Select new 时,Linq 查询在 EntityDataSource1_QueryCreated 事件上给出异常;

Posted

技术标签:

【中文标题】当我放置 Select new 时,Linq 查询在 EntityDataSource1_QueryCreated 事件上给出异常;【英文标题】:Linq query giving exception on EntityDataSource1_QueryCreated Event when I put Select new;当我放置 Select new 时,Linq 查询在 EntityDataSource1_QueryCreated 事件上给出异常; 【发布时间】:2016-06-21 01:59:57 【问题描述】:

我有实体数据源,我在其上使用查询创建的事件来获取总量,但是当我绑定 gridview 时它给出了异常

意外结果类型的 ObjectQuery 实例 'f__AnonymousType3`5' 在 QueryCreated 中分配给 Query 事件。与“购买”兼容的结果类型的 ObjectQuery 是 预计。

DateTime dt = DateTime.Now.AddDays(-1);
int ids=DML.getid(txtpartyname.Text);
var pur = e.Query.Cast<purchase>();
        e.Query = from p in pur
                  where p.InvoiceNo == txtinvoice.Text && p.InvoiceDate > dt
                  orderby p.id descending
                  select new
                  
                      p.Amount,
                      p.category,
                      p.description,
                      p.qty,
                      Total=p.qty*p.Amount
                  ;

【问题讨论】:

请阅读How to create a Minimal, Complete, and Verifiable example,向我们提供有关您的代码以及您迄今为止尝试过的更多信息。 【参考方案1】:

在绑定到 Gridview 之前将查询转换为 ToList()。

    var pur = e.Query.Cast<purchase>();
    var gridViewList = (from p in pur
              where p.InvoiceNo == txtinvoice.Text && p.InvoiceDate > dt
              orderby p.id descending
              select new
              
                  p.Amount,
                  p.category,
                  p.description,
                  p.qty,
                  Total=p.qty*p.Amount
              ).ToList();

【讨论】:

您不能将 Anonymous 类型转换为 list 。不错的尝试 当然可以。这可能是因为您错误地将其分配给 e.Query。检查更新答案,您可以将该新变量绑定到您的网格视图。 错误 28 无法将类型“System.Collections.Generic.List”隐式转换为“System.Linq.IQueryable”。存在显式转换(您是否缺少演员表?) 不要将其分配给 e.Query。检查我更新的答案。 我在 EntityDataSource1_QueryCreated 事件中使用它,否则我在发布之前已经完成了它。它在查询创建事件上创建错误

以上是关于当我放置 Select new 时,Linq 查询在 EntityDataSource1_QueryCreated 事件上给出异常;的主要内容,如果未能解决你的问题,请参考以下文章

linq 里select new...的疑问

将静态列添加到动态 LINQ 查询

linq语句,常用的查询,模糊查询,实体查询

linq查询结果指定列的两种方式

如何获取 Linq 查询结果集合中的索引?

在linq中将sql查询转换为linq new