3

私の場合、言語とリソースを含む2つのテーブルを取得しました。やりたいことは、各言語で欠落しているすべてのリソースを見つけることです...

私が行きたいデフォルトの言語はlanguageId = 1です

表「リソース」

Id    Key    Value    LanguageId
1     k1     test     1
2     k1     test     2
3     k1     test     3

表「言語」

Id   
1
2
3
4
5
6
7

language には、約 10 行の言語が含まれています。

今、私がやりたいことは、存在しないリソースを取り出すことです (例の結果)

Key   Value   LanguageId
k1    test    1
k1    test    2
k1    test    3
k1    null    4
k1    null    5
k1    null    6
k1    null    7

この問題を解決する方法についての提案は、GroupJoin と SelectMany で試しましたが、良い結果は得られませんでした。

4

2 に答える 2

5

実際には、あなたの構造はまだ完全に正しくないように感じます.3 番目の ResourceKeys テーブルが必要です.in k1.すべての言語でその翻訳が失われます。そうしないと、意味のある概念 IMO である「翻訳のないリソース」を表す方法がありません。

次に、Language と ResourceKeys をクロス結合し、 Resources に対してグループ結合できます。

var query = from language in Languages
            from resourceKey in ResourceKeys
            join resource in Resources
                 on new { LangId = language.Id, ResId = resourceKey.Id }
                 equals new { LangId = resource.LanguageId,
                              ResId = resource.Key }
                 into values
            select new { LangId = language.Id,
                         ResId = resourceKey.Id,
                         Value = values.SingleOrDefault() };
于 2012-11-06T11:04:38.657 に答える
1
from lang in context.Languages
where !context.Resources.Contains(r => r.LanguageId == lang.LanguageId)
select lang
于 2012-11-06T11:01:37.957 に答える