gpt4 book ai didi

c# - 如何使用 LINQ to Entities 包含另一个表中的一个特定行

转载 作者:太空狗 更新时间:2023-10-29 23:47:42 24 4
gpt4 key购买 nike

我有一个包含这两个表的数据库:CustomerCustomerStatusCustomerStatus 是一个所谓的只读表。对客户状态的所有更改都会导致对该表进行 INSERT 操作。当前客户状态可通过 CustomerStatus.StatusTimestamp 找到。

现在我正在寻找一个 LINQ to entities 查询来加载所有客户及其当前状态。有点像

.Include("CustomerStatus.OrderByDescending(StatusTimestamp).FirstOrDefault()")

我还没有找到使用 EF 4.0 的正确方法。

我目前的解决方法非常难看,需要 2 个步骤:

第 1 步:加载所有状态的 LINQ 查询(在业务/数据层):


var r = 来自 db.Customers.Include("CustomerStatus") 中的 c
选择c;

第 2 步:从 GUI 中的每个客户获取合适的状态(在 MVC3 View 中循环):


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()
};

现在data是一个 IQueryable<anonymous_type> , 每个项目都有一个 Customer给客户的属性(property),以及LastStatus提供最新时间戳状态,或 null如果没有客户的任何状态记录。

你也可以在这里使用命名类型,这样输入对我来说更快:)。

关于c# - 如何使用 LINQ to Entities 包含另一个表中的一个特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8329285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com