在我们的数据库中,我们有许多表,它们具有相应的翻译表,语言和区域 ID(映射到其他表),语言 1 是英语,语言 1 的默认区域是英国。所有具有转换表的表都具有以下默认列(尽管实体框架类上没有定义接口):
<EntityTableName>
EntityTableNameID INT PK
Reference NVARCHAR NULL
[Any other columns]
<EntityTableNameTranslation>
EntityTableNameID INT NOT NULL
LanguageID INT NOT NULL
RegionID INT NULL
Title NVARCHAR NOT NULL
Description NVARCHAR NULL
Run Code Online (Sandbox Code Playgroud)
命名在整个数据库中是一致的,因此我们可以根据需要添加接口,但现在我一直在尝试这样做而不节省工作量。
确定返回哪个翻译标题和描述的逻辑是:1) 如果语言和地区都完全匹配,则返回它 2) 如果语言匹配,但没有地区匹配,则返回“默认” " 对于该语言(即 RegionID 为空的地方,并且每种语言总会有一个) 3)如果没有匹配的语言,则返回系统默认值(LanguageID = 1,RegionID IS NULL)。
我知道这一切听起来可能很奇怪,每个人都有更好的方法,但这是我必须处理的简短内容。所以这是我创建的 lambda 组连接函数,它使用数据库中名为“OrgGroup”的实体:
public static IEnumerable<TransViewModel> GetUserAreaOrgGroups(TransTestEntities context, int companyID, int languageID, int? regionID)
{
var transFull = context.OrgGroupTranslations.Where(tr => tr.LanguageID == languageID && tr.RegionID == regionID);
var transLang = context.OrgGroupTranslations.Where(tr …Run Code Online (Sandbox Code Playgroud)