5

LINQにオブジェクトに相当するSQLINステートメントはありますか?

4

2 に答える 2

16

はい -を含みます

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;

(これはもちろんドット表記で行うこともできますが、やや面倒になります。)

于 2009-01-08T10:59:19.843 に答える
0

このコンテキストでは、内部結合を使用します。を使用containsした場合、一致が 2 つしかないにもかかわらず、6 回反復されます。ここで強調したいのは、IN 述語の代わりに Join を使用するということです。

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();
于 2012-04-03T12:57:48.340 に答える