在LINQ to对象的语句中

时间:2009-01-08 10:48:25

标签: linq linq-to-objects

在LINQ对象中是否有等效的SQL IN语句?

2 个答案:

答案 0 :(得分:16)

是 - Contains

var desiredNames = new[] { "Jon", "Marc" };

var people = new[]
{
    new { FirstName="Jon", Surname="Skeet" },
    new { FirstName="Marc", Surname="Gravell" },
    new { FirstName="Jeff", Surname="Atwood" }
};

var matches = people.Where(person => desiredNames.Contains(person.FirstName));

foreach (var person in matches)
{
    Console.WriteLine(person);
}

(在LINQ to SQL中,这最终成为“IN”查询。)

请注意,在LINQ to Objects中,上面的效率并不高。加入你会更好:

var matches = from person in people
              join name in desiredNames on person.FirstName equals name
              select person;

(当然,这仍然可以通过点符号来完成,但最终会有些麻烦。)

答案 1 :(得分:0)

在这种情况下,我会选择Inner Join。如果我使用contains,它会迭代6次,尽管事实上只有两个匹配。我只想在此强调,我将选择联接而不是IN谓词。

var desiredNames = new[] { "Pankaj" };

var people = new[] 
{ 
    new { FirstName="Pankaj", Surname="Garg" }, 
    new { FirstName="Marc", Surname="Gravell" }, 
    new { FirstName="Jeff", Surname="Atwood" } 
};

var records = (from p in people join filtered in desiredNames on p.FirstName equals filtered select p.FirstName).ToList();