0

我有以下查询:

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 为空时看到空文本。

这可能是一些小事,但我已经看了一个小时,无法弄清楚。这是我得到的最接近的。

4

1 回答 1

0

您正在过滤掉任何不是 LID=languages.LID 的语言,因此当语言/字符串文本为空时,此条件永远不会成立。

此外,您似乎加入语言表的唯一原因是获取 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 : "" 
  }; 
于 2012-08-15T09:20:18.363 回答