关于c#:Entity Framework v2.1.3:对象的顺序属性(对象列表)

Entity Framework v2.1.3: Order property (list of objects) of object

标题措辞不好,我知道。

我有一个对象 User,它有一个属性(对象列表)(ICollection<Alert>) Alerts。我想通过警报的属性 (DateTime) LastActivatedDt

订购警报

我尝试过(在带有 int id 参数的方法中):

1
2
3
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'.


您不能在包含中执行此操作,实际上您根本不需要包含用于此特定目的。就这样吧:

1
users.OrderBy(o => o.Alerts.Min(a => a.LastActivatedDt)).FirstOrDefault();

你也可以使用 Max。这取决于您最终希望它们如何订购,但由于您正在处理一系列东西,因此您必须从中挑选一个来实际订购。

编辑

出于某种原因,我完全不考虑通过特定 id 部分获取用户。我想你实际上想要实现的是拉出一个特定的用户,同时让他们的警报集合得到适当的排序。这实际上是不可能的。您需要做的事情类似于:

1
2
var user = users.Include(x => x.Alerts).SingleOrDefault(x => x.Id == id);
var alerts = user.Alerts.OrderBy(o => o.LastActivatedDt);

您不能就地订购用户的警报。您必须使用排序结果设置一些其他变量。