我想针对数组进行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)
但是,我想在LinQ中这样做,这让我很伤心。我无法弄清楚。我想要所有的价值观。因此:
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";
现在,我想要一个只有三个元素的结果数组,其中包含Version 1.1,Version 2.1和Version 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
};
然后,它返回我的数组元素的所有四个。因此,没有好处。我没有像我想的那样得到MAX。
请帮忙!
感谢。
答案 0 :(得分:2)
使用
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
};