【问题标题】:Linq2Sql: Using IQueryable in selectLinq2Sql:在选择中使用 IQueryable
【发布时间】:2010-09-16 09:09:30
【问题描述】:

这可能很简单,但是.... 我有一个非常复杂的 linq 查询,我已经将它放入一个 IQueryable 函数中,我想在整个项目中重用它。但是当我在选择中使用它时,我得到“System.Linq.IQueryable`1[LINQPad.User.Orders] Foo(System.Guid) 没有对 SQL 的翻译”:(非常简化以显示我所拥有的之后)

void Main()
{
 (from e in Clients
 select new {
  e.CompanyName,
  Orders = Foo(e.Id).Count()
 }).Take(20).Dump();
}

IQueryable<Orders> Foo(Guid clientId)
{
 return Orders.Where(e => e.ClientId.Equals(clientId)); 
}

不起作用,但以下方法起作用:

void Main()
{
 (from e in Clients
 select new {
  e.CompanyName,
  Orders = Orders.Where(f => f.ClientId.Equals(e.Id)).Count()
 }).Take(20).Dump();
}

有什么方法可以在不重写 Foo 的情况下重写查询?

【问题讨论】:

    标签: c# linq-to-sql


    【解决方案1】:

    问题是您不能只将函数注入到 Linq 查询中,因为 Linq-to-SQL 或 Linq-to-Entities 不知道如何翻译它。 LINQPad 网站上有一个good description of the problem, and a solution

    另一种方法是先将数据集放入内存(例如使用ToList()),但这并不能真正实现您所追求的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      相关资源
      最近更新 更多