Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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查询中Group By的问题_C#_.net_Sql_Linq - Fatal编程技术网

C# LinQ查询中Group By的问题

C# LinQ查询中Group By的问题,c#,.net,sql,linq,C#,.net,Sql,Linq,我想对具有并返回多个列的数组进行LinQ查询。我似乎不能让它正常工作,我试过各种方法 首先,数组包含一个表中的类型和版本,例如: TypeID-------VersionID-------Text 1 1 "Version 1.1" 2 1 "Version 2.1" 3 1 "Version 3.1" 3 2

我想对具有并返回多个列的数组进行LinQ查询。我似乎不能让它正常工作,我试过各种方法

首先,数组包含一个表中的类型和版本,例如:

TypeID-------VersionID-------Text
1            1               "Version 1.1"
2            1               "Version 2.1"
3            1               "Version 3.1"
3            2               "Version 3.2"
这是一个SQL表,我可以通过此查询轻松获得最新版本:

SELECT 
        V.*
FROM Table V
WHERE V.VersionID IN (SELECT MAX(VersionID) GROUP BY TypeID)
然而,我想在林克做到这一点,这让我很痛苦。我想不出来。我想要所有的价值观。因此:

public MyStruct
{
   public int TypeID,
   public int VersionID,
   public string Text
}

MyStruct[] array = new MyStruct[4];
array[0].TypeID = 1;
array[0].VersionID = 1;
array[0].Text = "Version 1.1";
array[1].TypeID = 2;
array[1].VersionID = 1;
array[1].Text = "Version 2.1";
array[2].TypeID = 3;
array[2].VersionID = 1;
array[2].Text = "Version 3.1";
array[3].TypeID = 3;
array[3].VersionID = 2;
array[3].Text = "Version 3.2";
现在,我想要一个只包含三个元素的结果数组,分别包含版本1.1、版本2.1和版本3.2。由于版本3.1是一个“旧版本”,我想忽略它

我的LinQ是这样的:

var myArrayQuery = from arr in array
group arr by arr.TypeID into arrGroup
select new
{
   TypeID = arrGroup.Key,
   VersionID = (int)arrGroup.Max(mx=>mx.VersionID)
   // -- GET THE TEXT HERE ---
};
我想不出怎么得到文本

我试过:

var myArrayQuery = from arr in array
group arr by new{ arr.TypeID, arr.VersionID, arr.Text} into arrGroup
select new
{
   TypeID = arrGroup.TypeID,
   VersionID = (int)arrGroup.Max(mx=>mx.VersionID),
   Text = arrGroup.Text
};
然后,它返回所有四个数组元素。因此,没有好处。我没有得到我想要的最大值

请帮忙

谢谢。

使用

Text = arrGroup.OrderByDescending(mx=>mx.VersionID).First().Text
完整查询:

var myArrayQuery = from arr in array
group arr by arr.TypeID into arrGroup
select new
{
   TypeID = arrGroup.Key,
   VersionID = (int)arrGroup.Max(mx=>mx.VersionID),
   Text = arrGroup.OrderByDescending(mx=>mx.VersionID).First().Text
};

这就是t·瑞克。非常感谢。