我无法理解如何对这些类的列表进行分组。
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可以吗?或者我只是要迭代所有行并手动分离符合我标准的行。
答案 0 :(得分:2)
使用匿名类型,例如:
var orderGroups = orders.GroupBy(x => new {Property1, Property2});
答案 1 :(得分:2)
您可以在生成密钥时执行条件。
var groups = orders.GroupBy(x => new
{
x.OrderClassId,
TypeChoice = (x.OrderTypeId == 123) // ? true : false
}
答案 2 :(得分:2)
我认为这是你可以使用的(OrderId是唯一的,对吗?):
orders.GroupBy(o =>
new {
o.OrderClassId,
OrderIdSel = o.OrderTypeId == 123 ? o.OrderId : -1
} )
答案 3 :(得分:1)
正如基里尔所说的那样
var orderGroups = orders.GroupBy(x => new { x.OrderClassId, x.OrderSubTypeId });