【问题标题】:Linq with Left Join and multiples Key not Work带有左连接和倍数键的 Linq 不起作用
【发布时间】:2014-09-18 15:19:21
【问题描述】:

我需要帮助!

当我执行以下 LINQ 查询时,它运行良好(显示结果)

   using (var db = new MyEntities())
   {
    var result = (from dc in db.ClassDiary
                            where dc.DesTurm == dataForm.DesTurma
                            && dc.Module == dataForm.Module
                            && dc.CodDisc == dataForm.CdDisc
                        orderby dc.NrDiary
                        select new ClassDiaryMod
                        {
                            Id = dc.ID,
                            NrDiary = dc.NrDiary,
                            NrStudant = dc.NrStudant,
                            DesTurma = dc.DesTurma,
                            CdDisc = dc.CodDisc,
                            CdTeac = dc.CodTeac,
                            TotalFoult = (from f in db.Foult
                                           where
                                             f.NrStudant == dc.NrStudant &&
                                             f.Disc == dc.CodDisc
                                           select new FoultMod
                                           {
                                               Foults = f.Foult
                                           }).Sum(x => x.Foults)
                        }).ToList();

  return result;

当我尝试用多个键应用左连接时不显示结果

    using (var db = new FamespEntities())
    {

      var result = (from dc in db.ClassDiary
                              join fn in db.Foult
                                      on new { dc.NrStudant, dc.CodDisc, dc.DesTurm }
                                  equals new { fn.NrStudant, CodDisc = fn.Disc, DesTurm = fn.Desturm } into fn_join
                              from fn in fn_join.DefaultIfEmpty()
                            where dc.DesTurm == dataForm.DesTurm
                            && dc.Module == dataForm.Module
                            && dc.CodDisc == dataForm.CdDisc
                        orderby dc.NroDiary
                        select new ClassDiaryMod
                        {
                            Id = dc.Id,
                            NrDiary = dc.NroDiary,
                            NrStudant = dc.NrStudant,
                            DesTurm = dc.DesTurm,
                            CdDisc = dc.CodDisc,
                            CdTeac = dc.CodTeac,
                            FoultOfDay = fn.Foult,
                            TotalFoults = (from f in db.Foult
                                           where
                                             f.NrStudent == dc.NrStudant &&
                                             f.Disc == dc.CodDisc
                                           select new FoultMod
                                           {
                                               Foults = f.Foult
                                           }).Sum(x => x.Foults)
                        }).ToList();

想了解为什么第一个代码有效而第二个无效。 非常感谢

【问题讨论】:

    标签: c# sql asp.net-mvc linq repository


    【解决方案1】:

    你的平等

    on new { dc.NrStudant, dc.CodDisc, dc.DesTurm }
    equals new { fn.NrStudant, CodDisc = fn.Disc, DesTurm = fn.Desturm } 
    

    不正确,应该是

    on new { NrStudant = dc.NrStudant, CodDisc = dc.CodDisc, DesTurm = dc.DesTurm }
    equals new { NrStudant = fn.NrStudant, CodDisc = fn.Disc, DesTurm = fn.Desturm } 
    

    所以字段比较可以工作。

    【讨论】:

    • 错误已更改。现在 Visual Studio 要求我做一个 GroupJoin。你能帮我解决这个问题吗,我不知道。谢谢!
    • 我不确定,但我认为您已经加入了群组,请参阅this
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多