【问题标题】:Issue with Group By in LinQ QueryLinQ 查询中的 Group By 问题
【发布时间】:2013-08-12 18:53:14
【问题描述】:

我想对一个包含多列的数组进行 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";

现在,我想要一个结果数组,它只有三个元素,分别是版本 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
};

然后,它返回 所有四个 我的数组元素。因此,不好。我没有得到想要的 MAX。

请帮忙!

谢谢。

【问题讨论】:

    标签: c# .net sql linq


    【解决方案1】:

    使用

    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
    };
    

    【讨论】:

    • 成功了。谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-03-06
    • 2015-02-16
    • 2017-02-11
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多