Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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 groupjoin未生成所需的sql_C#_Linq_Entity Framework Core - Fatal编程技术网

C# linq groupjoin未生成所需的sql

C# linq groupjoin未生成所需的sql,c#,linq,entity-framework-core,C#,Linq,Entity Framework Core,我目前没有从Microsoft.EntityFrameworkCore 1.1.1版获得预期的结果 目前有一篇报道Id=1,投票数为0。我试图让GroupJoin返回一个对象,如果没有投票,Story对象不是空的,投票列表不是空的就是空的(我想它会是空的) 我用c#提出了这个问题: 编辑:正如克里斯托斯指出的,上面的C#没有编译。我在发布代码时犯了一个编辑错误。上面的代码现在正确地表示了代码,结果仍然相同 在这种情况下,storyvows为空。我有点困惑 LinqPad返回我期望的结果。它返

我目前没有从Microsoft.EntityFrameworkCore 1.1.1版获得预期的结果

目前有一篇报道Id=1,投票数为0。我试图让
GroupJoin
返回一个对象,如果没有投票,
Story
对象不是空的,
投票
列表不是空的就是空的(我想它会是空的)

我用c#提出了这个问题:

编辑:正如克里斯托斯指出的,上面的C#没有编译。我在发布代码时犯了一个编辑错误。上面的代码现在正确地表示了代码,结果仍然相同

在这种情况下,
storyvows
为空。我有点困惑

LinqPad返回我期望的结果。它返回
故事
对象和a列表(包含0项)

我直接在数据库上运行的查询也会返回结果

SELECT s."Id" as StoryId, v."Id" as VoteId
FROM "Stories" s
left outer JOIN "Votes" v on s."Id" = v."StoryId"
WHERE v."UserId" = 'fa157323-c4b2-4d8a-b7fc-c38988405f61' or v."UserId" is null
and s."Id" = 1;

根据Application Insights,EF生成此查询

SELECT "s"."Id", "s"."CreatedDate", "s"."Description", "s"."DescriptionMarkdown", "s"."ModifiedDate", "s"."Score", "s"."Title", "s"."Upvotes", "s"."Url", "s"."UserId", "s"."UserIsAuthor", "v"."Id", "v"."CommentId", "v"."CreatedDate", "v"."ModifiedDate", "v"."StoryId", "v"."UserId"
FROM "Stories" AS "s"
LEFT JOIN "Votes" AS "v" ON "s"."Id" = "v"."StoryId"
WHERE "s"."Id" = @__storyId_0
ORDER BY "s"."Id"
它似乎没有考虑where子句的
&(dict.v==null | | dict.v.Any(vo=>vo.UserId==UserId)
部分

你能解释一下为什么会发生这种情况,并解释一下我如何能达到我所期望的结果吗?

我认为

dict.v == null || dict.v.Any(vo => vo.UserId == userId
应该换成这个

dict.Votes == null || dict.v.Any(vo => vo.Votes.UserId == userId)
(正如您已经为
dict.Story
所做的那样).老实说,我想知道为什么编译器没有告知第一个是不正确的。
v
来自哪里?你对分组项进行投影,每个投影有两个属性,
Story
vows
。然后
v
来自哪里?我不清楚

关于LINQPad,请注意您的投影有两个属性…
s
v

更新

通过更仔细地查看LINQPad中的查询,我注意到

dict.v.Any(vo => vo.Votes.Id == 1)
这改变了一切!在查询中,您提到存在一个问题,对应的谓词是:

dict.Votes.Any(vo => vo.UserId == userId)

因此,您可以比较两个不同查询的结果。

是的,您是正确的,粘贴的代码肯定不代表我所拥有的。我将立即更新它
dict.Votes.Any(vo => vo.UserId == userId)