这个LINQ查询有什么作用?

时间:2010-02-10 20:18:35

标签: c# linq

这是两个C#类......

public class Address  
{  
    public string Country;  
    public string City;  
}

public class Traveller
{    
    public string Name;
    public List<Address> TravelRoute;
}

...和一个数据列表(填写在某处)......

List<Traveller> Travellers;

...然后这个LINQ查询:

var result = from t in Travellers
             where t.TravelRoute.Any(a => a.Country == "F")
             select t;

foreach (var t in result)
    System.Console.WriteLine(t.Name);

我不明白查询:“Any”功能的含义是什么,“=&gt;”是什么意思运营商呢?

有人可以解释一下这段代码中发生了什么吗?谢谢!

5 个答案:

答案 0 :(得分:7)

选择TravelRoute包含国家/地区“F”的所有旅行者。

如果列表中的任何对象满足传递给函数的条件,则Any函数返回true。从方法签名中,您可以看到Func<>委托需要返回bool。这意味着它将采用任何返回布尔值的方法,包括提供的lambda表达式。

这与Where不同,后者将根据传入的条件进行过滤。

=&gt;是lambda expression。在这种特殊情况下,它是编写anonymous delegate的快捷方式。

答案 1 :(得分:1)

该行

a => a.Country == "F"
如果它是一个单独的LINQ语句,

将转换为类似的东西:

From a as Adress in t.TravelRoute
Where a.Country = "F"
Select a

任何意味着它:任何。 换句话说,如果travelRoute中的任何对象的Country属性为“F”,它将返回true

希望有所帮助

答案 2 :(得分:0)

这是一个lambda表达式。 http://msdn.microsoft.com/en-us/library/bb397687.aspx 看起来它正在选择所有在“F”中有任何旅行路线的旅行者,这可能是一个国家。

答案 3 :(得分:0)

C# lambdas中使用了

=>

答案 4 :(得分:0)

任何过滤方法都说“接受符合以下条件的任何项目”。 a =&gt; ...业务意味着“给定一个参数a,这是一个方法” - 正如其他人所说,它用于lambda表达式。 编辑:将“属性”更改为“参数”