无法理解LINQ扩展方法

时间:2014-12-01 05:33:10

标签: c# linq

我无法解释以下陈述:

var myResults = new List<bool>();
myResults.Add(this.myWorkers.All(c => other.Workers.Any(cc => c.Equals(cc))));

我看了this article,分别解释了Any和All。但是我不太清楚如何解释嵌套的LINQ。

3 个答案:

答案 0 :(得分:2)

如果this.myWorkers.All(c => other.Workers.Any(cc => c.Equals(cc)))集合中的每个对象都显示在true myWorkers的{​​{1}}集合中,则

Workers会返回other

你可以用循环重写这个表达式:

bool All = true;
foreach (var c in this.myWorkers)
{

    bool Any = false;
    foreach (var cc in other.Workers)
        if (c.Equals(cc))
        {
            Any = true;
            break;
        }

    if (!Any)
    {
        All = false;
        break;
    }
}

myResults.Add(All);

答案 1 :(得分:1)

在列表myResults中添加一个布尔值,指示myWorkers集合中的每个项目是否与other.Workers集合中的任何项目相同。


可以在没有LINQ的情况下重写相同的代码:

var myResults = new List<bool>();
bool all = true;
foreach (var c in myWorkers)
{
    bool any = false;
    foreach (var cc in other.Workers)
    {
        if (c.Equals(cc))
        {
            any = true;
            break;
        }
    }
    if (!any)
    {
        all = false;
        break;
    }
}
myResults.Add(all);

答案 2 :(得分:0)

这里我们使用方法语法(Lamda表达式)

Lamda表达与集合一起工作。

myResults.Add(this.myWorkers.All(c => other.Workers.Any(cc => c.Equals(cc))));

下面

将添加元素的添加()方法用于 myResults 集合。 All()方法用于遍历集合的所有元素。 用于匹配元素的任何()方法,如果找到任何匹配项,则使用条件,然后跳过其rremain元素。

如果集合中的任何元素与 cc

匹配,则表达式返回 true