C# LINQ grp.Max(…)不提供仅最大值
我正在使用LINQ\EF,并尝试使用Dapper和实体框架替换SQL存储过程 我99%都在那里,有一个调用的特定方面,但是我得到了2个太多的结果,因为select没有得到最大值 SQLC# 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
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()
(无法测试代码)。您可能应该在答案中实际显示代码更改。太棒了,谢谢!完全正确我知道我现在哪里出了问题