【问题标题】:Implement LINQ to Entities unsupported method实现 LINQ to Entities 不受支持的方法
【发布时间】:2011-02-07 09:52:24
【问题描述】:

LINQ to Entities 有许多 LINQ 方法标记为“不支持”(http://msdn.microsoft.com/en-us/library/bb738550.aspx)。

有什么方法可以手动实现其中一些方法吗?还是我应该等待 EF 的下一个版本?

我特别需要这个方法:

IQueryable<TResult> Select<TSource, TResult>(this IQueryable<TSource> source, Expression<Func<TSource, int, TResult>> selector)

谢谢

UPD:例如我想用这种方式选择:

var usersWithRowNumbers = allUsers.Select((u, index) => new {UserID = u.UserID, Index = index});

【问题讨论】:

  • 你能提供一个关于你想用 select 做什么的代码简介吗?几乎所有 ef 问题都有解决方法,您是否要进行某种类型的分区?

标签: .net entity-framework linq-to-entities


【解决方案1】:

类似的东西?

allUsers.Select(u => new {UserID = u.UserID}).ToList().Select((u, index) => new {UserID = u.UserID, Index = index})

编辑

如果要进行额外的过滤,请在执行 ToList() 之前进行:

allUsers.Select(u => new {UserID = u.UserID}).AdditionalFilters().ToList().Select((u, index) => new {UserID = u.UserID, Index = index})

如果不是解决方案,请更准确地说明您想要实现的目标。带有数据或 sql 查询的示例会很好。

【讨论】:

  • 是的,类似的。但是对于 LINQ to Entities。
  • AsEnumerable() 而不是 ToList() 是否足以使第二个 Select 成为可能?如果是这样,它将避免一次将所有 ID 存储在内存中,以防它们太多。
  • 但它不是 Linq 到实体。我无法将所有项目都存储在内存中。
【解决方案2】:

LINQ to Entities(以及其他基于 IQueryable&lt;T&gt; 的 LINQ 实现)通过将表达式树转换到目标系统(在 LINQ to Entities:SQL 中)来工作。

为了支持额外的运算符,必​​须在该翻译层中进行更改,这是提供程序实施的核心。

鉴于 SQL 是面向设置的,我怀疑任何支持委托或表达式树获取索引的查询运算符都将得到支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多