除了之前和之后的订单

时间:2013-01-04 07:40:12

标签: linq

在此查询中

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 ObjectCollectionitems属于不同类型。 ObjectCollection是学生的集合,而items是学生ID的集合。现在我看到了问题。如何排除那些ID在items的学生?

2 个答案:

答案 0 :(得分:2)

如果ObjectCollection中的对象与i.value子句中返回的值具有兼容类型,则应检查它们。 我用LinqPad和Visual Studio做了一个简单的测试 - 一切正常。请注意,我的v.Date表达式返回DateTime的实例,而i.value也返回Datetime的实例,因此Except方法对两个兼容的数据序列进行操作。 LinqPad版本enter image description here Visual Studio版本 enter image description here

编辑:您应该尝试使用下面给出的查询。 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;