所以继续我的情况我得到了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
语言包含大约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,但没有很好的结果。
答案 0 :(得分:5)
我觉得你的结构实际上还不是很正确:你应该有一个ResourceKeys的第三个表,其中包含k1
。这样当你添加一个资源键时,首先要添加的是在ResourceKeys中的一个条目,此时所有语言将缺少该翻译。否则你无法表示“没有翻译的资源”,这是一个有意义的概念IMO。
然后您可以交叉加入语言和资源键,以及群组加入对资源:
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() };
答案 1 :(得分:1)
from lang in context.Languages
where !context.Resources.Contains(r => r.LanguageId == lang.LanguageId)
select lang