首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Lambda / Linq左联表不返回预期结果

Lambda / Linq左联表不返回预期结果
EN

Stack Overflow用户
提问于 2019-06-20 10:32:03
回答 1查看 2.2K关注 0票数 0

我在我的.net核心3(预览5)剃须刀页面应用程序中创建了Lambda,但由于某些原因,我无法使它正常工作。

我有以下问题:

  • 来自T-SQL和Lambda的结果是不同的
  • 我在Lambda中的Where部件会生成一个错误

我想使用lambda在我的应用程序中重新创建以下查询:

代码语言:javascript
运行
复制
SELECT 
   ai.crArtNrLeverancier,
   pli.crartnr
FROM [tblArtikelImport] ai
LEFT JOIN tblPLInkoop pli on pli.crArtNr = ai.crArtNrLeverancier
WHERE pli.crartnr is not null 

T-SQL中,这将产生22241条记录。

我的Lambda查询获得相同的结果集:

代码语言:javascript
运行
复制
var data = await _context.TblArtikelImport.GroupJoin(_context.TblPlinkoop,
    ai => ai.CrArtNrLeverancier,
    pli => pli.CrArtNr,
    (ai, pli) => new { ArtikelImport = ai, PLInkoop = pli })
    .Where(c => c.PLInkoop.Any(cc => cc.CrArtNr != null)).ToListAsync();

对于pli anonymous类型,我不能直接选择一个字段,这就是为什么我尝试使用PLInkoop.Any

WHERE部件返回以下错误:

代码语言:javascript
运行
复制
InvalidOperationException: Error generated for warning 'Microsoft.EntityFrameworkCore.Query.QueryClientEvaluationWarning: The LINQ expression 'where ([cc].CrArtNr != null)' could not be translated and will be evaluated locally.'. 

接下来,我试图在Lambda语句中完全删除Where部分,结果如下:

代码语言:javascript
运行
复制
var data2 = await _context.TblArtikelImport.GroupJoin(_context.TblPlinkoop,
    ai => ai.CrArtNrLeverancier,
    pli => pli.CrArtNr,
    (ai, pli) => new { ArtikelImport = ai, PLInkoop = pli })
    .ToListAsync();

上面的Lambda语句返回32962条记录,而下面的T-SQL语句(应该是相同的)返回51809条记录:

代码语言:javascript
运行
复制
SELECT 
       ai.crArtNrLeverancier,
       pli.crartnr
FROM [tblArtikelImport] ai
LEFT JOIN tblPLInkoop pli on pli.crArtNr = ai.crArtNrLeverancier

总的来说,我对兰博达非常陌生,所以这可能是显而易见的。我正在使用EF核心,并生成EF核心模型使用EF核心动力工具(反向工程表)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-20 12:20:42

Gert Arnold为类似的问题写了一个很好的答案,解释了Linq是如何加入工作的:Linq to Entities join vs groupjoin

通过在Linq查询上使用.SelectMany(),您似乎缺少了扁平化部分。这一点将在第2部分的链接答案中描述。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56684080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档