mkv*_*kva 5 .net c# linq entity-framework
我有一个包含这两个表的数据库:Customer和CustomerStatus.CustomerStatus是一个所谓的只读表.对客户状态的所有更改都会导致INSERT进入该表.当前客户状态可通过以下位置找到CustomerStatus.StatusTimestamp.
现在我正在寻找一个LINQ to实体查询,它将所有Customers加载到它们的当前状态.就像是
.Include("CustomerStatus.OrderByDescending(StatusTimestamp).FirstOrDefault()").
我没有找到适合EF 4.0的方法.
我目前的解决方法非常难看并使用两个步骤:
步骤1:加载所有状态的LINQ查询(在业务/数据层中):
var r = from c in db.Customers.Include("CustomerStatus")
select c;
步骤2:从GUI中的每个客户获取合适的状态(在MVC3视图的循环中):
c.CustomerStatus.OrderByDescending(i => i.StatusTimestamp).FirstOrDefault()
知道如何直接一步完成这项工作吗?
EF 比您想象的更强大。它可以做的事情之一是投影到一个IQueryable(即,在一个数据库命中)内的复杂类型。这应该有效:
var data =
from c in db.Customers
select new {
Customer = c,
LastStatus = c.CustomerStatus // assuming navigation property set up right
.OrderByDescending(s => s.StatusTimestamp)
.FirstOrDefault()
};
Run Code Online (Sandbox Code Playgroud)
Nowdata是一个IQueryable<anonymous_type>,每个项目都有一个Customer为客户提供的属性,以及一个LastStatus提供最新时间戳状态的属性,或者null是否没有客户的任何状态记录。
您也可以在这里使用命名类型,这样对我来说输入速度更快:)。
| 归档时间: |
|
| 查看次数: |
2565 次 |
| 最近记录: |