我需要在查询中加入2个表。 第一个表是Entries表,其中包含某些事件,如Dance,Speak,Sing,Play等。
PreserveReferences()
另一个表包含userEntries,表示每个用户在每个事件上的得分
Id|Name
1|Dance
2|Sing
3|Speak
4|Play
5| etc.
现在我想要一个linq查询首先获取所有条目,然后获取给定用户的分数,以便在用户拥有noscore时为条目分数重新调整null
实施例 对于用户898128,我希望看到类似这样的内容
Dance:200,Speak:null,Sing:120 from the result
我已经尝试了以下linq查询,我得到一个空结果
Id| UserId|EntryId|Score
1|898128 | 1 |200
2|827329 | 2 |120
3|898128 | 2 |100
我在使用Visual Studio 2017 15.6.3的Windows 10计算机上的ASP.NET核心2.0,实体框架核心上运行
我将非常感谢任何获取查询的指南,以便为我提供外部联接,这样即使用户没有任何分数,我也可以获得每个用户的所有条目。
请注意,这与this question错误标记的@Mahmoud不同。不同之处在于存在WHERE条件子句。
谢谢
答案 0 :(得分:0)
尝试此查询。它应该解决你的问题。
var userScores =(from e in db.Entries
join se in db.UserEntries on e.Id equals se.EntryId into ese
from nullse in ese.DefaultIfEmpty()
where (nullse==nulll ||(nullse!=null && nullse.UserId == "898128"))
select new
{
EntryLabel = e.Name,
EntryValue = nullse != null ? nullse.ValueAmount:"null"
}).ToList();
答案 1 :(得分:0)
我从this SO question找到答案。从那里,我意识到where子句的位置是问题。请参阅下面的工作代码修订
var userScores =
(from e in db.Entries join se in db.UserEntries.Where(o => o.UserId ==
"898128"
on e.Id equals se.EntryId
into ese from se in
ese.DefaultIfEmpty()
select new
{
EntryLabel=e.Label,
EntryValue=se.ValueAmount,
}).ToList();
ViewData["userScores "] = userScores;
感谢您@Hazarath提供指南