LINQ查询ForEach无法使用

时间:2018-01-30 11:54:20

标签: c# linq foreach

我有一个LINQ"结果" anonymuosType,在其中,它有一些实体对象,由LINQ从EF查询。

我想利用"结果"过滤并在" newResult"的实体对象上设置一些新值。

但是我无法在" newResult"之后的.Where()之后使用ForEach()。

我可以知道我做错了吗?使用LINQ的任何替代解决方案? (我可以做简单的foreach循环来实现它,但我想通过使用LINQ来学习更多。)

var result = (from e in unmatch_epay_details
                                   join w in DB.WatReconDetails
                                   on e.RetTransRef equals w.RetTransRef
                                   into a
                                   from b in a.DefaultIfEmpty()
                                   select new
                                   {
                                       ePayDetailID = e.ePayReconDetailID,
                                       WATStatus = (b == default(WatReconDetail)) ? 0 : 1,//** if default return 0.
                                       EpayInfo = e,
                                       WATinfo = b
                                   })
                                   .OrderBy(a => a.ServerTransDateTime)
                                  .ToList();


var newResult = result
        .Where(a => a.EpayInfo.condition =="condition")
        .ForEach(b => b.EpayInfo.result=="result");//I not able to use the foreach at here.

2 个答案:

答案 0 :(得分:3)

ForEach()不是linq,它是List<T>上的函数(并且您正在使用IEnumerable<T>)。 因此,请改用普通foreach

答案 1 :(得分:1)

正如其他人所指出的那样,ForEach适用于列表但不适用于IEnumerables。您可以定义自己的ForEach扩展,它可以像IEnumerable一样工作

 public static class MyExtension
 {
      public static void ForEach<T>(this IEnumerable<T> data, Action<T> action)
      {
            foreach (T element in data)
            {
                 action(element);
            }
      }
 }