目前,我正在使用实体框架并有两个数据库表,一个“父”表和一个“子”表来存储与语言相关的字符串:
我想“智能”获取遵循此“算法”的所有元素及其子元素的列表:
- 获取语言 A 的子元素。
- 如果不可用,则获取语言 B 的子元素。
(备用语言 B 始终存在)。
结果看起来像这样:
即,对于第 4 项,没有使用语言“DE”(德语)的条目,因此会退回到语言“EN”(英语)。
当只依赖一种语言时,我可以使用以下代码:
using (var ctx = new MyEntities())
{
var items =
ctx.Items.Select(
i =>
new ItemModel
{
Id = i.Id,
Name = i.ChildItems.FirstOrDefault(x => x.Language == "DE").Name
});
}
由于我还必须处理备用语言,所以我唯一能想到的就是使用foreach
循环。
理想情况下,我想避免这种情况并使用一个 LINQ 语句,类似于上面的语句。
所以我的问题是:
我可以在单个 LINQ 语句中表达我的“算法”吗?