Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用linq分组;但有条件_C#_.net_Linq_C# 4.0 - Fatal编程技术网

C# 用linq分组;但有条件

C# 用linq分组;但有条件,c#,.net,linq,c#-4.0,C#,.net,Linq,C# 4.0,我不知道如何将这些课程的列表分组 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; }

我不知道如何将这些课程的列表分组

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
}
我理解的基本分组。看起来,假设订单是一个列表:

但是,具有相同OrderClassId且OrderTypeId为123且具有相同OrderSubjectID的订单需要具有不同的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可能吗?或者我只是需要迭代所有行并手动分离符合条件的行。

使用匿名类型,例如:

var orderGroups = orders.GroupBy(x => new {Property1, Property2});

使用匿名类型,例如:

var orderGroups = orders.GroupBy(x => new {Property1, Property2});
正如基里尔所说,只要使用 var orderGroups=orders.GroupByx=>new{x.OrderClassId,x.ordersubscriptid}

正如基里尔所说,只要使用
var orderGroups=orders.GroupByx=>new{x.OrderClassId,x.ordersubscriptid}

您可以在生成密钥时设置条件

var groups = orders.GroupBy(x => new
{
  x.OrderClassId,
  TypeChoice = (x.OrderTypeId == 123) // ? true : false
}

您可以在生成密钥时执行条件

var groups = orders.GroupBy(x => new
{
  x.OrderClassId,
  TypeChoice = (x.OrderTypeId == 123) // ? true : false
}

我想这就是你可以使用的OrderId是唯一的,对吗

orders.GroupBy(o => 
  new {
    o.OrderClassId,
    OrderIdSel = o.OrderTypeId == 123 ? o.OrderId : -1
  } )

我想这就是你可以使用的OrderId是唯一的,对吗

orders.GroupBy(o => 
  new {
    o.OrderClassId,
    OrderIdSel = o.OrderTypeId == 123 ? o.OrderId : -1
  } )

但是我需要确保当OrderTypeId==123时,我只为OrderTypeId和orderSubscriptId执行逻辑,但是我需要确保当OrderTypeId==123时,我只为OrderTypeId和orderSubscriptId执行逻辑,但是我需要确保当OrderTypeId==123时,我只为OrderTypeId和orderSubscriptId执行逻辑,但是我需要确保我只在OrderTypeId==123时对OrderTypeId和OrderSubjectId执行逻辑这比其他的更接近。但它不区分具有相同和不同ordersubiteid值的行。请记住,我不需要将订单与OrderTypeId=123且OrderSubjectID为的其他订单分组。您的示例将分隔OrderTypeId=123的所有项目。正如您所说的,很难获取。您希望分隔“具有相同OrderClassId且OrderTypeId为123且具有相同OrderSubjectID的订单”。这听起来像:分开他们,句号。但是你所说的“并拥有ordersubiteid”是什么意思呢?这比其他的更接近。但它不区分具有相同和不同ordersubiteid值的行。请记住,我不需要将订单与OrderTypeId=123且OrderSubjectID为的其他订单分组。您的示例将分隔OrderTypeId=123的所有项目。正如您所说的,很难获取。您希望分隔“具有相同OrderClassId且OrderTypeId为123且具有相同OrderSubjectID的订单”。这听起来像:分开他们,句号。但是你所说的“并拥有ordersubiteid”是什么意思呢?