LINQ Fluent API版本的左连接查询

时间:2014-04-10 17:51:38

标签: c# linq

我目前有一个LINQ查询工作正常,但我想知道如何将其转换为LINQ流畅的API格式。我已经尝试在谷歌上搜索一个关于流畅API的体面教程,试着去学习我的自我,但似乎没有。

这是我要转换的查询:

from s in db.Sections
join f in db.Files
    on s.LogoFileID equals f.ID into s_f
where s.RouteName == SectionRoute
from x in s_f.DefaultIfEmpty()
select new GameSectionVM
{
    SectionID = s.ID,
    GameTitle = s.Title,
    LogoFileName = x.FileName,
    Synopsis = s.Synopsi
}).Single();

2 个答案:

答案 0 :(得分:2)

ReSharper提供以下转换:

(db.Sections.GroupJoin(db.Files, s => s.LogoFileID, f => f.ID, (s, s_f) => new { s, s_f })
          .Where(@t => s.RouteName == SectionRoute)
          .SelectMany(@t => s_f.DefaultIfEmpty(), (@t, x) => new GameSectionVM
                                                             {
                                                                 SectionID = s.ID,
                                                                 GameTitle = s.Title,
                                                                 LogoFileName = x.FileName,
                                                                 Synopsis = s.Synopsi
                                                             })).Single();

我不能保证其准确性,但它至少应该帮助你开始。 GroupJoin似乎是至少需要进行外连接的。

答案 1 :(得分:1)

很难准确说出在您的情况下会起什么作用,因为您还没有提供所有相关类型的详细信息;但是,有点像这样:

(db.Sections.GroupJoin(db.Files, s => s.LogoFileID, f => f.ID, (s, s_f) => new {s, s_f})
    .Where(t => t.s.RouteName == SectionRoute)
    .SelectMany(t => t.s_f.DefaultIfEmpty(), (t, x) => new GameSectionVM
    {
        SectionID = t.s.ID,
        GameTitle = t.s.Title,
        LogoFileName = x.FileName,
        Synopsis = t.s.Synopsis
    })).Single();

假设Section类存在且具有正确命名的属性Synopsis(不是Sysnopsi