2012-04-10 4 views
2

내 질문이LINQ는

을 요청을받은 경우 내가 LINQ에 새로운 죄송 나는이 수업

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;} 
} 

나는 목록을 저장하고 있습니다 IEnumerable 목록의 주택 수

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 회를 ​​얻기의 내가 한 번 그것을 얻을 후 사용할 수있는 방법이 있나요 :

내 질문은 이것이다. something like

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

다른 테이블의 값을 조인 할 때 Join 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 
    }); 

참고 : 나는 GetAllPersons()와 GetAllHouses() 메서드를 추천 할 것입니다 오히려 된 IQueryable 반환 코드를 사용하여 (그리고 집과 사람이 공중에있는 모든 속성을), 여기에 LINQ는 방법을 참가를 사용하는 방법입니다 IEnumerable보다. 이렇게하면 컬렉션을 열거하고 다음에에 가입하는 대신 LINQ-to-SQL (또는 Entities)이 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); 
    } 
    } 
} 

출력

에 대한

감사합니다 대단히는 컴퓨터 고소 당신은 매우 가까이있어 셔츠