Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Linq到实体框架中折射嵌套查询_C#_Entity Framework_Linq To Entities - Fatal编程技术网

C# 在Linq到实体框架中折射嵌套查询

C# 在Linq到实体框架中折射嵌套查询,c#,entity-framework,linq-to-entities,C#,Entity Framework,Linq To Entities,假设我有这个问题: var ps = from p in dc.Products let text = (from t in p.Text orderby t.Language == "ja" descending select t).FirstOrDefault() select new { p.Id, text.Name }; 是否有任何方法可以折射分配给文本的查询 我的猜

假设我有这个问题:

var ps = from p in dc.Products
         let text =
             (from t in p.Text
              orderby t.Language == "ja" descending
              select t).FirstOrDefault()
         select new { p.Id, text.Name };
是否有任何方法可以折射分配给
文本的查询

我的猜测是我需要把它变成一个
表达式
,但我不知道如何调用它

顺便说一句,如果有更有效的方法,我很乐意知道

谢谢

雷伊

编辑:为了澄清这一点,我们的想法是,如果日语不可用,我希望它可以使用任何其他可用的语言

也许这样更有效

let text = p.Text.FirstOrDefault(t => t.Language == "ja") ?? p.Text.FirstOrDefault()

无论哪种方式,我的主要问题是如何使
文本
查询可重用——因为它相当不直观,我可以想象自己或其他人将来会做错事。

根据评论编辑

var ps = dc.Products.Select(p => new 
{
    Id = p.Id, 
    Text = p.Text.OrderBy(t=> t.Language == "ja").First()
})
.Select (x => new
{
    Id = x.Id,
    Name = x.Name,
    ...
});

不完全是,因为我希望它依赖于任何可用的语言。此外,我可能需要的不仅仅是
名称
——因此
let
。是有意义的,尽管我怀疑你真的想回到一种特定的语言,而不是一些随机的语言??那么编辑的版本呢?虽然现在它和你开始的差不多。嗯,是的,看起来和我的第一个非常接近。我猜执行的查询大致相同。回到一种特定的语言(可能是英语)会很好,但如果我最终会使用第三种语言,我可能会担心这一点。应该能够添加一个
,然后使用fallbackPriority
或类似的方法。现在我只担心日语和英语。