第一?单?还是默认?

pro*_*mad 5 c# linq entity-framework

我搜索过StackOverflow但仍然无法理解使用单一,第一(或默认)查询的正确语法.

我愿意提出一个问题来首先捕获特定语言的翻译.如果数据库中没有这样的翻译,请用英语获取第一个.

这是我到目前为止所得到的:

locale = "ja-jp";

var items = from c in db.Contents.Include("Translation")
            where c.RegionalInfo.Any(x => x.RegionId == locale)
            select c;
Run Code Online (Sandbox Code Playgroud)

编辑 Obs:items是一个IEnumerable

Jim*_*ley 1

根据您的解释,听起来您想要找到该值,如果没有找到则使用英文翻译。考虑以下:

locale = "ja-jp"; 

var itens = from c in db.Contents.Include("Translation") 
            where c.RegionalInfo.Any(x => x.RegionId == locale) ||
                  c.RegionalInfo.Any(x => x.RegionId == "en")
            order by (c.RegionalInfo.RegionId == "en", "zzzz", c.RegionalInfo.RegionId) 
            select c; 
var foundItem = items.FirstOrDefault();
if (foundItem != null)
{ ... }
Run Code Online (Sandbox Code Playgroud)

这会找到与您的区域设置和英语记录相匹配的记录,然后按 RegionId 对结果进行排序,将找到的英语项目放在列表末尾,然后获取第一个记录(如果找到)。注意:我没有测试此实现,因此请务必检查 orderby 参数以确保其按设计工作。