gpt4 book ai didi

c# - 使用 LINQ 连接后获取特定对象

转载 作者:行者123 更新时间:2023-12-04 13:22:58 25 4
gpt4 key购买 nike

我正在尝试检索与 Entity Framework 中的表相关的特定类,使用 linq 进行连接,条件如下:

                var result = (from a in db.Persons
join b in db.Person_IDs on a.PersonId equals b.PersonId
where b.FaceId == faceId
select new
{
PersonId = a.PersonId,
Name = a.Name,
Address = a.Address,
Picture = a.Picture,
City = a.City,
Estate = a.Estate,
Phone = a.Phone,
CellPhone = a.CellPhone,
BlackList = a.BlackList
}
).FirstOrDefault();

我希望“结果”对象作为 Person 对象返回。在上述情况下,我需要创建一个新的 Person 对象并添加来自结果的字段。

这可能吗?我尝试了一些方法并使用了一些样本和研究,但所有替代方法都不适合我。

谢谢!

更新 1

好吧,经过一些阅读,我发现最好的方法是为我的 Person 对象创建一个 DTO 类,并在我的函数中返回这个 DTO 类,如下所示:

PersonDTO result = (from a in db.Persons
join b in db.Person_IDs on a.PersonId equals b.PersonId
where b.FaceId == faceId
select new PersonDTO
{
PersonId = a.PersonId,
Name = a.Name,
Address = a.Address,
Picture = a.Picture,
City = a.City,
Estate = a.Estate,
Phone = a.Phone,
CellPhone = a.CellPhone,
BlackList = a.BlackList
}
).FirstOrDefault();

db.Dispose();

return result;

好吧,它运行良好,但有一件事困扰着我:为什么要创建另一个与 EF 类相同的类?为什么EF类不能这样用?

我正在使用一个表,但是一个程序,例如,有 20 个表将迫使我有 20 个实体类和 20 个实体 DTO 类!

作为初学者,我认为这种工作方式有点杂乱无章或毫无意义,使传统方式(使用数据读取器、命令和连接)变得毫无意义。即使更加官僚,它也不需要“重复”对象。

有人可以提供这个答案吗?

更新 2

根据要求:因为我不想在我的函数中返回匿名类型,所以我尝试返回实体类 (Person),但是当我这样做时,我在应用程序执行中遇到以下错误:

“无法在 LINQ to Entities 查询中构造实体或复杂类型‘Models.Person’。”

因此,解决方案是创建一个 DTO 类(或 View 模型类,随便什么)。

最佳答案

如果您的数据库中有 Person 对象,并且您想要 Person 对象,为什么还要麻烦创建一个匿名类型?

为什么不试试

var result = (from a in db.Persons
join b in db.Person_IDs on a.PersonId equals b.PersonId
where b.FaceId == faceId
select a).FirstOrDefault();

关于c# - 使用 LINQ 连接后获取特定对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46834852/

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