将 Linq 中 IEnumerable 与 IQueryable 的差异设置为实体

本文关键字:设置 实体 IQueryable Linq IEnumerable | 更新日期: 2023-09-27 18:36:27

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

我需要在 Linq to 实体中找到它们之间的集合差异,例如,

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)。

有什么帮助吗?

谢谢马尼坎丹·

将 Linq 中 IEnumerable 与 IQueryable 的差异设置为实体

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

如果"Except"不起作用(由于自定义类类型),则需要在自定义类上实现IEqualityComparer。 这里有一个非常好的例子:

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