我有3张桌子:
strings
-----------
- string_id
- fallback_text
translations
----------------------
- translation_id
- string_id
- locale_id
- text
locales
---------------------
- locale_id
我想要实现这样的结果集:
string_id | locale_id | text
----------------------------
1 | en_US | bread
1 | es_ES | pan
1 | fr_FR | NULL
没有翻译"面包"用法语,但我想在结果中。
在SQL中会有一些想法:
SELECT strings.string_id, locales.locale_id, translations.text
FROM strings
JOIN translations on strings.string_id = translations.string_id
RIGHT JOIN locales on translations.locale_id = locales.locale_id
此SELECT不能解决我的问题。我想要的是列出在locales表中存在的每个语言环境中没有翻译的每个字符串。我认为这不会发生在SELECT语句中。
想象一下,我们有: 语言环境表:
|locale_id|
-----------
|en_US |
|es_ES |
字符串表:
|string_id|fallback_text|
-------------------------
|1 |bread |
|2 |water |
翻译表:
|translation_id|string_id|locale_id|translation
-----------------------------------------------
|1 |1 |en_US |bread
|2 |2 |es_ES |agua
我想实现这个结果集:
string_id | locale_id | text
----------------------------
1 | en_US | bread
1 | es_ES | NULL
2 | en_US | NULL
2 | es_ES | agua
提前致谢。
答案 0 :(得分:0)
实现此目的的最简单方法是使用SQL视图。
使用select语句创建SQL视图,然后创建一个与该视图匹配的实体。该实体将具有3个属性string_id,locale_id,text。确保此实体将(string_id和locale_id)定义为主键。如果您首先使用代码,那么您的映射将类似于:
ToTable("MyViewName");
HasKey(x => new { x.string_id, x.locale_id });
答案 1 :(得分:0)
var query = from s in db.strings
from t in db.translation
where s.string_id == t.string_id
select new {s.stringid, t.locale_id, t.text }