0
假如我有这个疑问:Refractoring Linq中的嵌套查询到实体框架
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 };
有什么办法来折射被分配到text
查询?
我的猜测是我需要使它成为Expression<Func<Product, string, ProductText>>
,但我不知道如何调用它。顺便说一下,如果有更有效的方法来做到这一点,我很乐意知道。
感谢,
川
编辑:为了澄清,该想法是,如果日本无法使用,我希望它依傍任何其他语言可用。
也许这样更有效率?
let text = p.Text.FirstOrDefault(t => t.Language == "ja") ?? p.Text.FirstOrDefault()
无论哪种方式,我的主要问题是关于我会如何做text
查询可重复使用的 - 因为它是相当直观,我能想象自己或别人这样做是错误的未来。
不完全是,因为我希望它依傍任何一种语言,是可用的。另外,我可能会想要的不仅仅是'名字' - 因此'let'。 – 2010-11-04 05:58:57
有道理,虽然我怀疑你真的想回到特定的语言,而不是一些随机的?那编辑后的版本呢?尽管现在它与你开始的东西几乎完全相同。 – 2010-11-04 06:08:50
嗯是的,这看起来非常接近我的第一个。我猜测执行的查询几乎是一样的。回到某种特定的语言会很好(可能是英语),但如果我以第三种语言结束,我可能会担心它。应该能够添加一个'然后通过fallbackPriority'或者沿着这些线。现在我只担心日语和英语。 – 2010-11-04 06:17:29