【问题标题】:Set Difference of IEnumerable from IQueryable in Linq to Entities将 IEnumerable 与 Linq 中的 IQueryable 的差异设置为实体
【发布时间】:2015-01-07 04:30:53
【问题描述】:

我有两个列表,一个是 IQueryable,另一个是 IEnumerable。

我需要在 Linq to Entities 中找到它们之间的差异,

IQueryable - IEnumerable,其中 T 是复杂类型(类)。

当我尝试使用 IQueryable.Except(IEnumerable) 时,它没有按预期工作。

var listQuery = select query; (listQuery becomes an IQueryable type)
var listEnumerable = (select query).ToList(); (listEnumerable becomes an IEnumerable type)
listQuery.Except(listEnumerable); 

(这不会执行预期的操作,想象一下,listQuery.Count() 是 110,listEnumerable.Count() 是 30,所以最终的 except() 应该返回 80,而不是返回整个 110)。

有什么帮助吗?

谢谢 马尼坎丹J

【问题讨论】:

标签: c# linq


【解决方案1】:

IQuerable 将 linq 转换为 sql 语句并将其作为服务器触发,而 IEnumerable 在内存中设置结果,它在内存中而不是在服务器端执行所有操作。

【讨论】:

    【解决方案2】:

    如果“Except”不起作用(由于自定义类类型),那么您需要在自定义类上实现 IEqualityComparer。这里有一个很好的例子:

    http://msdn.microsoft.com/en-us/library/vstudio/bb336390%28v=vs.100%29.aspx

    【讨论】:

    • LINQ to Entities 不关心相等比较器。
    猜你喜欢
    • 2022-08-18
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多