gpt4 book ai didi

c# - 如何在 LINQ to Entities 查询中使用复制构造函数?

转载 作者:太空宇宙 更新时间:2023-11-03 20:55:27 24 4
gpt4 key购买 nike

我正在处理一个 Linq 表达式,在该表达式中我从 DBContext 中获取一个对象,我想将其设为自定义 ViewModel 对象

我的 ViewModel 接收一个从 DBContext 获取的对象作为参数来处理信息并完全返回它

这是一个小例子

public class Obj1 // Object i get from database
{
public int id { get; set; }
public string Param { get; set; }
public string Param2 { get; set; }
public string Random { get; set; }
}

public class Obj2 //ViewModel
{
public string ParamFormateado { get; set; }
public string Random { get; set; }

public Obj2(Obj1 parametro)
{
ParamFormateado = parametro.Param + parametro.Param2;
Random = parametro.Random;
}

}

我想要做的是获取一个带有 Linq 表达式的 Obj2,该表达式返回一个 Obj1 而无需转换 linq 表达式中的信息,因为在我的例子中它变成了一个基本难以辨认的表达

我正在尝试这样的事情

Obj2 objeto = db.Obj1.Where(x => x.id == "0").Select(x => new Obj2(x)).FirstOrDefault();

是否可以执行与我提议的类似的 Linq 查询?否则,我最终会使用非常长的 Linq 表达式来格式化此信息,但在这些情况下最好的选择是什么?

最佳答案

你不能那样做,因为只支持无参数构造函数。但是您可以使用 Linq-To-Objects 来完成,这可以用 AsEnumerable 强制执行:

Obj2 objeto = db.Obj1
.Where(x => x.id == "0")
.AsEnumerable() // <--- here
.Select(x => new Obj2(x))
.FirstOrDefault();

因此只有带 Where 的过滤器才会在数据库中执行,其余记录在进程中处理。

https://codeblog.jonskeet.uk/2011/01/14/reimplementing-linq-to-objects-part-36-asenumerable/

关于c# - 如何在 LINQ to Entities 查询中使用复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51063061/

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