Группировка с linq; Но с условиями - PullRequest
1 голос
/ 12 октября 2011

У меня возникли проблемы с тем, как сгруппировать список этих классов.

public class Order
{
    public int OrderId { get; set; }
    public long OrderClassId { get; set; }
    public int OrderTypeId { get; set; }
    public int OrderSubTypeId { get; set; }
    public string OrderString { get; set; }
    //.. other Order stuff not relevant to question
}

Основную группировку я понимаю.Выглядит это так (предположим, orders - это List<Order>):

var orderGroups = orders.GroupBy(x=>x.OrderClassId);

// Code to assign a unique OrderString to each group goes here

Однако заказы, имеющие одинаковый OrderClassId и OrderTypeId, равный 123 и имеющие одинаковый OrderSubTypeId, должны иметь разные значения OrderString..

Это немного сбивает с толку, так что вот пример:

var order1 = new Order
                    {
                        OrderId = 1,
                        OrderClassId = 8754,
                        OrderTypeId = 123,
                        OrderSubTypeId = 7156
                    };

var order2 = new Order
                    {
                        OrderId = 2,
                        OrderClassId = 8754,
                        OrderTypeId = 123,
                        OrderSubTypeId = 7156
                    };

var order3 = new Order
                    {
                        OrderId = 3,
                        OrderClassId = 8754,
                        OrderTypeId = 951,
                        OrderSubTypeId = 35144
                    };

При моей группировке все они получат одинаковые OrderString.Но мне нужно order2, чтобы получить другой OrderString.

Возможно ли это с помощью linq?Или мне просто нужно перебрать все строки и вручную отделить те, которые соответствуют моим критериям.

Ответы [ 4 ]

2 голосов
/ 12 октября 2011

Я думаю, это то, что вы могли бы использовать (OrderId уникален, верно?):

orders.GroupBy(o => 
  new {
    o.OrderClassId,
    OrderIdSel = o.OrderTypeId == 123 ? o.OrderId : -1
  } )
2 голосов
/ 12 октября 2011

Вы можете выполнять условия при генерации ключей.

var groups = orders.GroupBy(x => new
{
  x.OrderClassId,
  TypeChoice = (x.OrderTypeId == 123) // ? true : false
}
2 голосов
/ 12 октября 2011

Используйте анонимный тип, например ::10000

var orderGroups = orders.GroupBy(x => new {Property1, Property2});
1 голос
/ 12 октября 2011

Как говорит Кирилл, просто используйте var orderGroups = orders.GroupBy(x => new { x.OrderClassId, x.OrderSubTypeId });

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...