我正在处理一个 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/