Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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 grp.Max(…)不提供仅最大值_C#_Linq - Fatal编程技术网

C# LINQ grp.Max(…)不提供仅最大值

C# LINQ grp.Max(…)不提供仅最大值,c#,linq,C#,Linq,我正在使用LINQ\EF,并尝试使用Dapper和实体框架替换SQL存储过程 我99%都在那里,有一个调用的特定方面,但是我得到了2个太多的结果,因为select没有得到最大值 SQL SELECT MAX(QS.QSVersion) AS LatestVersion, QS.QSNo AS VerQSno FROM [forms].QS INNER JOIN [forms].QSCollectionMappings qsc O

我正在使用LINQ\EF,并尝试使用Dapper和实体框架替换SQL存储过程

我99%都在那里,有一个调用的特定方面,但是我得到了2个太多的结果,因为select没有得到最大值

SQL

SELECT
    MAX(QS.QSVersion) AS LatestVersion,
    QS.QSNo           AS VerQSno
FROM
    [forms].QS
INNER JOIN
    [forms].QSCollectionMappings qsc
        ON qsc.QSNo = QS.QSNo
WHERE
    qsc.QSCollectionTypeId = @QSCollectionTypeId
    AND QS.StatusId = 2
GROUP BY
    QS.QSNo;
林克

ar join = (from qs in QS
            join qscm in QSCollectionMappings on 
                    new { QuestionNumber = qs.QSNo, Version = qs.QSVersion } equals 
                    new {QuestionNumber = qscm.QSNo, Version = qscm.QS.QSVersion} 
            where qscm.QSCollectionTypeId == collectionId && qs.StatusId == 2
            group qs by new
            {
                QuestionNumber = qs.QSNo,
                QuestionVersion = qs.QSVersion,

            } into grp
            select new {
                QuestionNumber = grp.Key.QuestionNumber,
                QuestionVersion = grp.Max(x => x.QSVersion)
            });
结果

 The results 

     QSNo   |Version

|34 |-| 1.0 |
|38 |-| 1.0 |  // Should not show
|276|-| 1.0 |  // Should not show
|38 |-| 2.0 |
|276|-| 2.0 |
如果有人能告诉我我在这里做错了什么,我将不胜感激,以便我能够解决这个问题

谢谢


Simon

您同时通过
QSNo
QSVersion
进行分组,从技术上讲,每个唯一的组合都将在一个单独的组中,这意味着结果是正确的

您应该做的是单独在
QSNo
上分组,然后在版本上使用
Max

我无法测试代码,但此代码段应该可以工作:

var join=(来自qs中的qs)
在上的QSCollectionMappings中加入qscm
新的{QuestionNumber=qs.QSNo,Version=qs.QSVersion}等于
新{QuestionNumber=qscm.QSNo,Version=qscm.QS.QSVersion}
其中qscm.qscolectiontypeid==3&&qs.StatusId==2
按qs.QSNo将qs分组到grp中
选择新的{
问题编号=grp.键,
QuestionVersion=grp.Max(p=>p.QSVersion)
});

您通过
QSNo
QSVersion
进行分组,从技术上讲,每个唯一的组合都将位于单独的组中,这意味着结果是正确的

您应该做的是单独在
QSNo
上分组,然后在版本上使用
Max

我无法测试代码,但此代码段应该可以工作:

var join=(来自qs中的qs)
在上的QSCollectionMappings中加入qscm
新的{QuestionNumber=qs.QSNo,Version=qs.QSVersion}等于
新{QuestionNumber=qscm.QSNo,Version=qscm.QS.QSVersion}
其中qscm.qscolectiontypeid==3&&qs.StatusId==2
按qs.QSNo将qs分组到grp中
选择新的{
问题编号=grp.键,
QuestionVersion=grp.Max(p=>p.QSVersion)
});


向我们显示您的SQL查询以及您根据问题编号和版本进行的分组。如果您只需要max版本,请通过.@Nikola.Lukovic编辑question@juharr当我尝试无法访问其他所需属性时,我需要处理的只是问题编号(这将是关键)和版本,那么您究竟有哪些内容无法访问?请注意,我不是说更改用于联接表的FK,而是更改用于对结果进行分组的FK。同时显示SQL查询您正在根据问题编号和版本进行分组。如果您只需要max版本,请通过.@Nikola.Lukovic编辑question@juharr当我尝试无法访问其他所需属性时,我需要处理的只是问题编号(这将是关键)和版本,那么您究竟有哪些内容无法访问?请注意,我不是说更改用于连接表的FK,而是更改用于对结果进行分组的FK。我不认为这是正确的,但是如果我不同时进行分组,我将无法访问其他属性
QSNo
将成为键,版本将成为组内的值,因此您只需执行
grp.Max()
(无法测试代码)。您可能应该在答案中实际显示代码更改。非常感谢!完全正确我现在可以看出哪里出了问题。我不认为这是对的,但是如果我不按这两个属性分组,我就无法访问其他属性。如果不按这两个属性分组,则
QSNo
将成为键,版本将成为组内的值,因此您只需执行
grp.Max()
(无法测试代码)。您可能应该在答案中实际显示代码更改。太棒了,谢谢!完全正确我知道我现在哪里出了问题