【发布时间】:2011-12-04 11:10:27
【问题描述】:
var articles = context.Articles.Where(a => a.Id != articleId)
.OrderBy(p => p.Categories.OrderBy(q => q.Name).FirstOrDefault().Name).ToList();
我收到可能的 NullReferenceException 消息,这是正确的。
所以我做
var articles = context.Articles.Where(a => a.Id != articleId)
.OrderBy(p =>
(p.Categories.OrderBy(q => q.Name).FirstOrDefault() != null
? p.Categories.OrderBy(q => q.Name).FirstOrDefault().Name
: null))
.Skip(page * pageSize)
.Take(pageSize)
.ToList();
这行得通,但语句调用了两次并且可能很慢,所以我尝试制作
var articles = context.Articles.Where(a => a.Id != articleId)
.OrderBy(p =>
{
var firstOrDefault = p.Categories.OrderBy(q => q.Name).FirstOrDefault();
return firstOrDefault != null ? firstOrDefault.Name : null;
}).ToList();
但我明白了
带有语句体的 lambda 表达式不能转换为 表达式树。
我能做什么? Ss 第一个例子正确,即使我打电话两次p.Categories.OrderBy(q => q.Name).FirstOrDefault().
我认为这可能会很慢。我在数据库中有 200k 行。
【问题讨论】:
-
你必须使用
lambda到那种程度吗?通过重构一些lambda表达式,可能更容易解决您的解决方案并使代码更具可读性。
标签: c# entity-framework