LINQ:使用FK关系用另一个表的数据覆盖列数据

时间:2018-01-26 09:29:41

标签: c# linq lambda

我有两张表如下:

OriginalText(ID, LanguageId, Key, TextValue);
CustomText(ID, ClientID, FkOriginalTextId, TextValue);

这两个表通过外键关联:FkOriginalTextId

基本上,OriginalText将具有不同语言的键/值对。如果特定客户端想要定制某个值,那么它将转到CustomText表。一个例子是OriginalText:Employee,CustomText:密钥的员工成员:员工

我想写一个Lambda / Linq来从OriginalText表中获取给定语言的所有文本,但是如果CustomText表中有该键的自定义替换,则应该覆盖TextValue。我可以使用多个SQL语句通过将OriginalText值获取到临时表以及稍后使用CustomText值更新它们来执行此操作,但是有更好的方法吗?也许使用CTE?

P.S。我想使用LINQ或Lambda表达式

来做到这一点

1 个答案:

答案 0 :(得分:1)

由于两个表具有关系,因此您可以轻松检查每个OriginalText项是否具有CustomText。如果存在,则从CustomText获取值:

OriginalText.Select(ot=> new OriginalText {
   TextValue = ot.CustomText.Any()? ot.CustomText.FirstOrDefault().TextValue:ot.TextValue,
   ID = ot.ID,
   LanguageId = ot.LanguageId,
   Key = ot.Key
});