2013-05-06 2 views
1

저는 linq 및 C#을 처음 사용합니다. 여기에 나는 모델 클래스를 가지고 있어야한다는 문제에 봉착했습니다.C에서 목록 개체에서 클래스로 캐스팅 #

public class Product 
{ 
    public int ItemID { get; private set; } 
    public string Title { get; set; } 
    public string Description { get; set; } 
    public DateTime AuctionEndDate { get; set; } 
    public int Price { get; set; } 
} 

public class ShoppingCart 
{ 
    public List<Product> Products { get; set; } 
} 

여기 장바구니의 모든 항목을 정렬하는 확장 방법을 만들고 싶습니다. 이 목록을 포함하기 때문에

public static ShoppingCart Sort(this ShoppingCart cart) 
{ 

    var sortedCart = from item in cart.Products 
        orderby item.Title ascending 
        select item; 
    return sortedCart.ToList(); 
} 

그래서 방법은, 내가 sortedCart.ToList()을 반환 할 수 없습니다. 어떻게 쇼핑 카트를 반환 할 수 있습니까? 누구든지 나를 도와주세요. 감사합니다

+0

확장 방법보다는 그것의 새 목록의 복사본을 만드는 장소에 cart' 항목의 목록입니다'돌연변이해야합니다 . – asawyer

+1

어쩌면 새로운 ShoppingCart() {Products = sortedCart.ToList();를 반환하십시오. } – sasjaq

+0

은 간단히 생성자를 생성합니다. 생성자는'List '을 매개 변수로 사용하고 해당 매개 변수를 Products로 설정합니다. 그런 다음'Return new ShoppingCart (sortedCart.ToList ()); ' – jAC

답변

6

새로운 ShoppingCart 인스턴스를 생성하고 방금 생성되는 정렬 된 목록 자사 Products을 설정 원래 카트가 정렬되지 않습니다

물론
return new ShoppingCart { Products = sortedCart.ToList() }; 

이 방법; 그것은 새로운 (복제 된) 카트입니다. 당신이 현재 위치에서 원본을 정렬하고자한다면, 당신은 LINQ 원래 제품 컬렉션이 아닌 List<T>.Sort을 사용해야합니다

cart.Products.Sort((x,y) => x.Title.CompareTo(y.Title)); 
+0

Jon .. 잘하고 있습니다. – Hope

1

당신은 제품의 목록에서 쇼핑 카트를 만들 수있는 방법이 필요합니다. 당신은 당신의 기존 세터 또는 생성자를 사용할 수 있습니다 중 하나

다음
public class ShoppingCart 
{ 
    public ShoppingCart(List<Product> products) 
    { 
     this.Products = products; 
    } 
... 
} 

단지 return new ShoppingCart(sortedCart.ToList());

0

왜 확장 방법의 필요성?

목록이 이미 채워져 있다고 가정합니다.

shoppingCart.Products.OrderBy(x => x.Title); 

또는 확장 방법을 사용하여

public static void Sort(this ShoppingCart cart) 
{ 

    cart.Products = (from item in cart.Products 
        orderby item.Title ascending 
        select item).ToList(); 
} 

또는

public static void Sort(this ShoppingCart cart) 
{ 
    shoppingCart.Products.OrderBy(x => x.Title); 
}