Linq外连接语法

时间:2012-08-15 08:25:34

标签: c# .net linq

我有以下查询:

var query =
     from modules in _Context.Modules
     join moduleStrings in _Context.ModuleStrings on modules.MID equals moduleStrings.MID
     join strings in _Context.Strings on moduleStrings.SID equals strings.SID
     join stringTexts in _Context.StringTexts on strings.SID equals stringTexts.SID into stringsEmpty
     from stringTexts in stringsEmpty.DefaultIfEmpty()
     join languages in _Context.Languages on stringTexts.LID equals languages.LID
     where modules.MID == MID && LID == languages.LID
     select new GridData6S() 
     { 
         Name = strings.Name,
         Text = stringTexts != null ? stringTexts.Text : ""
     };

我想加入它,以便在stringTexts为空时看到空文本。

这可能是一件小事,但我已经看了一个小时,但无法理解。这是我最接近的。

1 个答案:

答案 0 :(得分:0)

您正在过滤掉任何非LID = languages.LID的语言,因此当languages / stringTexts为null时,此条件永远不会为真。

另外,您似乎加入语言表的唯一原因是获取LID也是连接条件,您可以跳过加入语言

模块也是如此.....

这可能有所帮助,而且更简单

var query = 
  from moduleStrings in _Context.ModuleStrings  
  join strings in _Context.Strings on moduleStrings.SID equals strings.SID 
  join stringTexts1 in _Context.StringTexts.Where(x=>x.LID==LID) on strings.SID equals stringTexts.SID into stringsEmpty 
  from stringTexts in stringsEmpty.DefaultIfEmpty() 
  where moduleStrings.MID == MID 
  select new GridData6S()  
  {  
      Name = strings.Name, 
      Text = stringTexts != null ? stringTexts.Text : "" 
  };