0

在这个查询中

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 的集合。现在我看到了问题。我将如何排除那些有身份证的学生items

4

2 回答 2

2

您应该检查您的对象ObjectCollection是否具有与在i.value子句中返回的值兼容的类型。我用 LinqPad 和 Visual Studio 做了一个简单的测试——一切都很好。请注意,我的v.Date表达式返回实例,DateTimei.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;
于 2013-01-04T08:55:36.230 回答
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;
于 2013-01-04T10:11:03.487 回答