1

我在加入两个 LINQ 查询时遇到问题。

目前,我的(原始)代码看起来像这样

s.AnimalTypes.Sort((x, y) => string.Compare(x.Type, y.Type));

我需要做的是根据日期更改它,然后选择该日期之后的所有数据,所以我有

s.AnimalTypes.Select(t=>t.DateChanged > dateIn).ToList()
s.AnimalTypes.Sort((…

这看起来不正确,因为它没有对所选数据进行排序,而是对 s.AnimalTypes 中的所有内容进行排序。

有没有办法连接两条 LINQ 行?我试过了

s.AnimalTypes.Select(t=>t.DateChanged > dateIn).ToList().Sort((…

但这给了我排序部分的错误。

有没有一种简单的方法可以做到这一点?我环顾四周,Grouo 和 OrderBy 不断出现,但我不确定这些是我需要的。

谢谢

4

2 回答 2

1

根据您的描述,我相信您想要类似的东西:

var results = s.AnimalTypes.Where(t => t.DateChanged > dateIn).OrderBy(t => t.Type);

如果需要,您可以在最后调用ToList()转换为 a List<T>

我相信您在这里缺少几个基本概念-

首先,与LINQ 扩展方法不同List<T>.Sort的是,LINQ 扩展方法不会更改原始集合,而是返回一个IEnumerable<T>带有过滤或排序结果的新集合。这意味着您总是需要为返回值分配一些东西(因此我var results =在上面)。

其次,Select执行映射操作——将数据从一种形式转换为另一种形式。例如,您可以使用它来提取DateChanged( Select(t => t.DateChanged)),但这会为您提供日期的枚举,而不是原始的动物类型。为了使用谓词(标准)过滤或限制列表,您可以Where改用。

最后,您可以使用OrderBy对生成的可枚举进行重新排序。

于 2013-04-30T22:30:13.630 回答
0

当您Select真正想要使用Where.

Select是从一种类型的集合到另一种类型的投影 - 您不会使用 增加或减少集合中的项目数Select,但您可以选择每个对象的名称或其他一些属性。

Where是您用来根据布尔谓词过滤集合的方法。

于 2013-04-30T22:34:40.303 回答