How to convert nested foreach loops with conditions to LINQ

前端 未结 4 829
小蘑菇
小蘑菇 2021-01-16 14:57

I\'d like to ask if it is possible to convert below nested foreach loops to LINQ expression.

public interface IFoo
{
  bool IsCorrect(IFoo foo);
  void DoSom         


        
4条回答
  •  我在风中等你
    2021-01-16 15:36

    You can do this but this is not more efficient what you have so far:

    var query= listA.SelectMany(a=>listB.Select(b=>new {a,b}))
                    .Where(e=>e.b.IsCorrect(e.a))
                    .ToList()// Foreach is a method of List
                    .Foreach(e=> e.b.DoSomething(e.a));
    

    To avoid to call ToList, you can implement an extension method like this:

    public static void ForEach(this System.Collection.Generic.IEnumerable list, System.Action action)
    {
        foreach (T item in list)
            action(item);
    }
    

    And then your query would be:

    var query= listA.SelectMany(a=>listB.Select(b=>new {a,b}))
                    .Where(e=>e.b.IsCorrect(e.a))
                    .Foreach(e=> e.b.DoSomething(e.a));
    

提交回复
热议问题