在此查询中
var list = (from t in ObjectCollection
select t).OrderBy(v => v.Date)
.Except(from i in items select i.value).OrderBy(v => v.
第一个OrderBy中的lambda表达式显示Date属性,但在第二个OrderBy中则不显示。为什么呢?
编辑#1
ObjectCollection
和items
属于不同类型。 ObjectCollection
是学生的集合,而items
是学生ID的集合。现在我看到了问题。如何排除那些ID在items
的学生?
答案 0 :(得分:2)
如果ObjectCollection
中的对象与i.value
子句中返回的值具有兼容类型,则应检查它们。
我用LinqPad和Visual Studio做了一个简单的测试 - 一切正常。请注意,我的v.Date
表达式返回DateTime
的实例,而i.value
也返回Datetime
的实例,因此Except
方法对两个兼容的数据序列进行操作。
LinqPad版本
Visual Studio版本
编辑:您应该尝试使用下面给出的查询。 Except
方法采用相同类型的两个序列,并从第一个序列中删除元素,这些元素存在于第二个序列中。谢谢@lazyberezovsky我将把studentToExclude序列带入内存来更新我的答案。
var studentsToExclude = items.Select(i => i.Value).ToList();
var result = from student in ObjectCollection
where !studentsToExclude.Contains(student.ID) //I suppose your IDs are stored here
orderby student.Date
select student;
答案 1 :(得分:2)
您似乎正在尝试让ID不在项目列表中的学生:
var values = items.Select(i => i.Value).ToList();
var list = ObjectCollection.Where(v => !values.Contains(v.ID))
.OrderBy(v => v.Date);
或者使用加入(如果项目列表中没有重复项):
var list = from v in ObjectCollection
join i in items on v.ID equals i.Value
orderby v.Date
select v;