c# - Linq 查询在 SQL 中生成不同的结果
问题描述
我在 LINQ 中编写了这个左连接,我只PersonId
从SHPerson
表中选择,但在 SQL Server 分析器中,我也是PersonId
从SHPFA
表中获取的。
var spfQuery = from n in shHPFARepository.GetAll()
.AsNoTracking()
.Where(t => t.ShareCount > 0)
group n by new { n.PersonId } into nGroup
select new
{
nGroup.Key.PersonId,
TotalhareCount = nGroup.Sum(t => t.ShareCount)
};
var query = (from sp in SHPersonRepository.GetAll().AsNoTracking()
join spf in spfQuery on sp.Id equals spf.PersonId
select new SHPOutputDto
{
PersonId = sp.PersonId,
ShareCount = spf.TotalShareCount,
IsShareHolder=true
});
var resultDto = await query.ToListAsync();
我不想SHPFA.PersonId
在查询中选择 ([t0].[PersonId])。
SELECT [t0].[PersonId], [t0].[TotalShareCount], [e].[PersonId]
FROM [SHolders].[SHPerson] AS [e]
INNER JOIN
(SELECT [t].[SHPersonId], SUM([t].[ShareCount]) AS [TotalShareCount]
FROM [SHolders].[SHPFA] AS [t]
WHERE [t].[ShareCount] > 0
GROUP BY [t].[PersonId]) AS [t0] ON [e].[Id] = [t0].[PersonId]
解决方案
您是想从子选择内部连接中删除它还是想从最终选择结果中删除它?因为似乎您正在使用两个相似的列[PersonId]
和[SHPersonId]
如果这只是一个错字,那么您应该[SHPersonId]
在第一个查询中使用,如下所示:
var spfQuery = from n in shHPFARepository.GetAll()
.AsNoTracking()
.Where(t => t.ShareCount > 0)
group n by n.SHPersonId into nGroup
select new
{
SHPersonId = nGroup.Key,
TotalhareCount = nGroup.Sum(t => t.ShareCount)
};
PS:不要忘记通过重命名PersonId
来修改第二个查询SHPersonId
推荐阅读
- ruby-on-rails - 如何将 Rails 6 中的 JqTree 与 webpacker 集成,树不是函数
- selenium - 如何等到下拉值加载到机器人框架中的 if else 条件
- appium - Python Appium“滑动”操作不适用于 TouchAction
- python - 忽略括号和 re.sub 的第一次出现
- javascript - 在 VueJS 中使用观察者?
- html - 替代在 safari 上工作的 mailto
- python - 如何找到适合 Python 的最佳线条(banister-impulse 模型)
- python - Python Pandas Dataframes:不能有条件地删除行,总是在意外时删除整个数据集
- haskell - 如何使用 Haddock 记录记录类型内的函数参数?
- python - 将文本文件读入矩阵python