在LINQ对象中是否有等效的SQL IN语句?
答案 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();