将两个linq语句混合为一个

本文关键字:一个 混合 两个 linq 语句 | 更新日期: 2023-09-27 18:30:06

我有两个linq语句,它们都能完全工作。我想知道是否有可能把它们混合在一起,在一次linq之后得到合适的列表。

var result = list3.Where(Srodek => list4.Any(x => x == Srodek.Srodek.category1) &&
                                  (Srodek.Srodek.Source.Device == _text || Srodek.Srodek.ID.Device == _text))
                  .ToList();
var list666 = list3.Select(obj => new { obj, dt = DateTime.ParseExact(obj.LeftColumn, dateFormat, CultureInfo.InvariantCulture) })
                   .Where(x => x.dt >= czas11 && x.dt <= czas22)
                   .Select(x => x.obj).ToList();

将两个linq语句混合为一个

LINQ方法返回IEnumerable<T>,并且可以对IEnumerable<T>进行操作。

你可以写

sequence.Where(...).Select(...)

一个列表:

var result = list3.Where(obj => {
                              var dt = DateTime.ParseExact(obj.LeftColumn, dateFormat, CultureInfo.InvariantCulture);
                              return (list4.Any(x => x == obj.Srodek.category1) &&
                              (obj.Srodek.Source.Device == _text || obj.Srodek.ID.Device == _text)) ||
                              (dt >= czas11 && dt <= czas22);})       
                  .ToList();

为什么不能将它们混合在一起?list.where(……).select(…..).toList();

var result = list3.Where(Srodek => list4.Any(x => x == Srodek.Srodek.category1) &&
                         (Srodek.Srodek.Source.Device == _text || Srodek.Srodek.ID.Device== _text))
                   .Select(obj => new { obj, dt = DateTime.ParseExact(obj.LeftColumn, dateFormat, CultureInfo.InvariantCulture) })
                  .Where(x => x.dt >= czas11 && x.dt <= czas22)
                  .Select(x => x.obj)
                  .ToList();

您可以使用Union加入两个linq查询。

list3.Where(Srodek => list4.Any(x => x == Srodek.Srodek.category1) &&
                              (Srodek.Srodek.Source.Device == _text || Srodek.Srodek.ID.Device == _text))
               .Union(list3.Select(obj => new { obj, dt = DateTime.ParseExact(obj.LeftColumn, dateFormat, CultureInfo.InvariantCulture) })
               .Where(x => x.dt >= czas11 && x.dt <= czas22)
               .Select(x => x.obj));