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がnullの場合に空のテキストが表示されるように、結合したいと思います。

それはおそらく小さなことですが、私はこれを1時間見ていて、理解できません。これは私が得た最も近いものです。

4

1 に答える 1

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 : "" 
  }; 
于 2012-08-15T09:20:18.363 に答える