关于c#:Entity Framework v2.1.3:对象的顺序属性(对象列表)
Entity Framework v2.1.3: Order property (list of objects) of object
标题措辞不好,我知道。
我有一个对象
订购警报
我尝试过(在带有
|
user = users
.Include(user => user.Alerts.OrderBy(alert => alert.LastActivatedDt) .FirstOrDefault(user => user.Id === id) |
但我收到以下错误:
System.InvalidOperationException: The Include property lambda expression 'user => {from Alert alert in user.Alerts orderby [alert].LastActivatedDt asc select [alert]}' is invalid. The expression should represent a property access: 't => t.MyProperty'. To target navigations declared on derived types, specify an explicitly typed lambda parameter of the target type, E.g. '(Derived d) => d.MyProperty'.
相关讨论
- 你不能在包含中做到这一点。您应该在包含后订购您的 alers
您不能在包含中执行此操作,实际上您根本不需要包含用于此特定目的。就这样吧:
|
users.OrderBy(o => o.Alerts.Min(a => a.LastActivatedDt)).FirstOrDefault();
|
你也可以使用
编辑
出于某种原因,我完全不考虑通过特定 id 部分获取用户。我想你实际上想要实现的是拉出一个特定的用户,同时让他们的警报集合得到适当的排序。这实际上是不可能的。您需要做的事情类似于:
|
var user = users.Include(x => x.Alerts).SingleOrDefault(x => x.Id == id);
var alerts = user.Alerts.OrderBy(o => o.LastActivatedDt); |
您不能就地订购用户的警报。您必须使用排序结果设置一些其他变量。
相关讨论
- 对于用户列表,我最终做了
users.OrderBy(u => u.Id).ThenBy(u => u.Alerts.Min(a => a.LastActivatedDt) 。 -
对于个人用户,执行
user = users.FirstOrDefault(u => u.id); user.Alerts.OrderBy(a => a.LastActivatedDt) 会更快吗?