2012-04-10 7 views
2

私はリストを保存しています私の質問はLINQ入社値

を依頼されている場合、私は2クラス

public class Person 
{ 
    int ID {get;set;} 
    string FirstName {get;set;} 
    string LastName {get;set;} 
} 

public class House 
{ 
    int ID {get;set;} 
    string Address {get;set;} 
    string ZipCode {get;set;} 
    int PersonId {get;set;} 
} 

を持ってLINQに新しいと申し訳ありませんのリストは家庭内の数字で表示されます。

IEnumerable<House> ListHouses = GetAllHouses(); 

GetAllHousesはGetPersonByIDが与えられたIDを持っているタイプPersonのオブジェクトを返します

var st = ListHouses .Select(h => new 
{ 
    id = h.ID, 
    Address= h.Address, 
    Zip= h.ZipCode , 
    PersonFirstName = GetPersonByID(h.PersonId).FirstName, 
    PersonLastname = GetPersonByID(h.PersonId).lastname 

}); 

次のデータベース

私が行うためにラムダは、LINQで選択使いたいから家のリストを返します。私は彼の名と姓を取る。

代わりに変数(personFirstNameとPersonLastName)のために人を2回取得する私は1時間にそれを取得し、それを使用することができる方法があります:

私の質問はこれです。何かのように

PersonForId = GetPersonByID(h.PersonId) 
PersonFirstName = PersonLastName.FirstName, 
PersonLastname = PersonLastName.lastname 

私はあなたが別のテーブルからの値を結合するSQLの結合に似たものを探しています。サムはブック を買っ出力

任意のヘルプ

+1

LINQは参加構造を持っています。 –

+1

こちらをご覧くださいhttp://www.dotnetperls.com/join C#Join Example:LINQ –

答えて

4

を買ったあなたは非常に近いです買ったゲーム を買いました!

var st = GetAllHouses().Join(GetAllPersons(), 
    outerKey => outerKey.PersonId, 
    innerKey => innerKey.ID, 
    (house, person) => new 
    { 
     house.ID, 
     house.Address, 
     house.ZipCode, 
     PersonFirstName = person.FirstName, 
     PersonLastname = person.LastName 
    }); 

注:ここでは、あなたのコードを使用して(と家と人の公共上のすべてのプロパティを作ること)LINQを使用する方法が法に参加している私は(GetAllPersonsをお勧めします)とGetAllHouses()メソッドは、かなりのIQueryableを返しますIEnumerableよりも。これにより、コレクションを列挙する代わりにLOOQ-to-SQL(またはエンティティ)がJOINを含む適切なSQLステートメントを作成し、、次にに参加するという式を構築します(結合を含む)。このように

追加情報はここで見つけることができます:Returning IEnumerable<T> vs. IQueryable<T>

3
using System; 
using System.Linq; 

class Customer 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

class Order 
{ 
    public int ID { get; set; } 
    public string Product { get; set; } 
} 

class Program 
{ 
    static void Main() 
    { 
    // Example customers. 
    var customers = new Customer[] 
    { 
     new Customer{ID = 5, Name = "Sam"}, 
     new Customer{ID = 6, Name = "Dave"}, 
     new Customer{ID = 7, Name = "Julia"}, 
     new Customer{ID = 8, Name = "Sue"} 
    }; 

    // Example orders. 
    var orders = new Order[] 
    { 
     new Order{ID = 5, Product = "Book"}, 
     new Order{ID = 6, Product = "Game"}, 
     new Order{ID = 7, Product = "Computer"}, 
     new Order{ID = 8, Product = "Shirt"} 
    }; 

    // Join on the ID properties. 
    var query = from c in customers 
      join o in orders on c.ID equals o.ID 
      select new { c.Name, o.Product }; 

    // Display joined groups. 
    foreach (var group in query) 
    { 
     Console.WriteLine("{0} bought {1}", group.Name, group.Product); 
    } 
    } 
} 

のためのあなたは非常に多くの

おかげでデイブはジュリアがコンピュータ スーシャツ