2009-12-05 2 views
3

와 목록 에서 제품의 고유 한 항목을 얻는 방법 ->이 같은 주문 행 시나리오 뭔가 : 나는 고전적인 주문이 어떻게 LINQ

public class Order 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public List<OrderRow> OrderRows { get; set; } 
} 

public class OrderRow 
{ 
    public int Id { get; set; } 
    public int ProductId { get; set; } 
    public int Amount { get; set; } 
} 

및 목록 < 주문>. 그 주문 목록에서 모든 고유 ProductIds의 목록을 얻고 싶습니다.

var orders = new List<Order>(); 
// TODO get the orders from DB 
var products = new Dictionary<int,int>(); 
orders.ForEach(order => order.OrderRows.ForEach(row => products[row.ProductId]=row.ProductId)); 

을하지만 사전의 내 사용에 대해 질문을 가지고 내가 LINQs GROUPBY를 사용하지 않은 이유도 어떻게 작동하는지 분명 아니었다 코멘트 :

나는 이런 식으로 해결. 나는 해결책이 좋다고 생각하지만 의견은 LINQ에서 그것을 해결하려고 노력하지만, 어떤 이유로 나는 벽돌 벽을 치려고했다.

여기 LINQ 주문 목록에서 고유 제품 ID 목록을 얻으려면 어떻게해야합니까?

답변

7

테스트되지 않은,하지만에 대한 방법 :

var products = orders.SelectMany(o => o.OrderRows) 
        .Select(r => r.ProductId) 
        .Distinct(); 
+0

작품을, 감사합니다! 여하튼 나는 전에 SelectMany를 완전히 놓쳤다. –

1

이 주문 목록에서 독특한 제품 ID를 받아야합니다. 당신이 SelectMany을 기억하고 싶지 않은 경우

var orders = new List<Order>(); 

// Get orders from database. 

IEnumerable<int> uniqueIds = orders.SelectMany(order => order.OrderRows) 
    .Select(row => row.ProductId).Distinct(); 
2

것은,이 쿼리 이해 구문은 아직도 당신이 가고 싶은 곳을 얻을 것이다 : 마법처럼

var productIDs = 
(
    from order in orders 
    from orderrow in order.OrderRows 
    select orderrow.ProductId 
).Distinct(); 
+0

니스 매우 명확! –