2013-05-06 1 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(), потому что это содержит список. Как я могу вернуть shoppingCart? Если кто-нибудь знает, пожалуйста, помогите мне. Благодаря

+0

Метод расширения нужно будет мутировать 'cart' на месте, а затем создать новый список копию Вот список пунктов , – asawyer

+1

может быть возвращен новый ShoppingCart() {Products = sortedCart.ToList(); } – sasjaq

+0

просто создайте конструктор, который принимает «Список » в качестве параметра и устанавливает этот параметр в «Продукты». then: 'return new ShoppingCart (sortedCart.ToList ());' – jAC

ответ

6

Создать новый экземпляр ShoppingCart и установить его Products быть отсортированный список просто произведено:

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

Конечно, этот путь оригинальная корзина не будет отсортирован; это новая (дублирующаяся) тележка, которая будет. Если вы хотите отсортировать оригинал в месте, вы должны использовать List<T>.Sort на оригинальной коллекции продукта и не LINQ:

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); 
} 
Смежные вопросы