设置从Linq中的IQueryable到实体的IEnumerable的差异

时间:2015-01-07 04:30:54

标签: c# linq

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

我需要在Linq和实体之间找到它们之间的集合差异,

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

任何帮助?

由于 Manikandan J

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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