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

标签 c# entity-framework linq dbcontext

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

相关文章:

c# - DataAnnotation 和 Code First 使用 Identity 2.2.1 为 ApplicationUser 创建外键

LINQ 查询 - 如何排序?

linq - NHibernate.Linq 和 MultiCriteria

c# - 单步执行 Linq 语句提示

c# - "Database is locked"SQLite 和 C#

c# - 单击 GridView 查找所选行

c# - Xamarin iOS 内存分析

c# - 在 C# 中使用 IFilter 并从数据库而不是文件系统中检索文件

c# - Entity Framework 已安装,但无法访问

linq - 当他们说 LINQ 是可组合的时,他们是什么意思?