LINQ具有内部可枚举查询

Dev*_*aig 1 linq

我很难理解LINQ.在下面的例子中,我有三次会议.Jane Doe被分配到其中两个会议.但是我认为下面的代码应该产生两个答案,显示三个会议.有任何想法吗?

class Program
{
    static void Main(string[] args)
    {
        Person p1 = new Person() { Name = "John Doe" };
        Person p2 = new Person() { Name = "Jane Doe" };
        Person p3 = new Person() { Name = "Alan Doe" };
        Meeting m1 = new Meeting() { MeetingName = "Meeting One", People = new List<Person> { p1, p2 } };
        Meeting m2 = new Meeting() { MeetingName = "Meeting Two", People = new List<Person> { p2, p3 } };
        Meeting m3 = new Meeting() { MeetingName = "Meeting Three", People = new List<Person> { p1, p3 } };
        List<Meeting> allMeetings = new List<Meeting>{m1,m2,m3};
        //Now, find all the meetings that Jane Doe is in
        var results = allMeetings.Select(x => x.People.Select(y => y.Name == "Jane Doe").Any());
        Console.WriteLine(results.Count().ToString());
        Console.ReadLine();
    }
}
public class Meeting
{
    public string MeetingName { get; set; }
    public List<Person> People { get; set; }
}
public class Person
{
    public string Name{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

这就是问题:

x.People.Select(y => y.Name == "Jane Doe").Any()
Run Code Online (Sandbox Code Playgroud)

您正在使用Select,这是一个投影,当您打算使用时Where,进行过滤.鉴于Select永远不会筛选出任何项目,您基本上会返回所有会议,其中有任何与会者.

事实上,你可以更简单地做到这一点,因为Any可以采取一个条件:

x.People.Any(y => y.Name == "Jane Doe")
Run Code Online (Sandbox Code Playgroud)

  • @StriplingWarrior:的确如此.我差不多把这个问题当成了一个错字,但后来我觉得它可能对其他人有用.当然,他们必须先找到它. (2认同)