Asp.net mvc 无法在LINQ to Entities查询中使用lambda表达式构造实体或复杂类型
我正在尝试我在教程中看到的代码:Asp.net mvc 无法在LINQ to Entities查询中使用lambda表达式构造实体或复杂类型,asp.net-mvc,linq,Asp.net Mvc,Linq,我正在尝试我在教程中看到的代码: public ActionResult GetSearchRecord(string SearchText) { List<Unit_Of_Measurement> list = db.Unit_Of_Measurement.Where(x=>x.name.Contains(SearchText) && x.is_deleted == 0).Select(x => new Unit_Of_Measurement
public ActionResult GetSearchRecord(string SearchText)
{
List<Unit_Of_Measurement> list = db.Unit_Of_Measurement.Where(x=>x.name.Contains(SearchText) && x.is_deleted == 0).Select(x => new Unit_Of_Measurement { name = x.name}).ToList();
return PartialView("SearchPartial", list );
}
这是测量模型的单位,我在创建此模型时使用了db first方法:
public partial class Unit_Of_Measurement
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Unit_Of_Measurement()
{
this.Ingredients = new HashSet<Ingredient>();
}
public int id { get; set; }
public string name { get; set; }
public byte is_deleted { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Ingredient> Ingredients { get; set; }
}
但我得到了这个错误
无法在LINQ to Entities查询中构造实体或复杂类型“hwbModel.Unit Of_Measurement”
不能直接投影到模型类型中。尝试使用annonymous类型或DTO,即数据传输对象 注释型 然后,您需要更新PartialView,以支持新的DTO,而不是单位度量模型 更新 这是一个实体框架EF限制。LINQ to entities将把您的LINQ查询转换为命令树查询,该查询将针对EF执行以返回对象 从ObjectContext构造ObjectQuery实例。 使用 ObjectQuery实例。 将LINQ标准查询运算符和表达式转换为命令 树。 以命令树表示形式对数据执行查询 来源执行期间在数据源上引发的任何异常都是 直接传递给客户机。 将查询结果返回给客户端。
在构建可以针对EF执行的命令树时有一些限制,因此直接投影到模型类型不支持EF。这意味着您的LINQ查询没有错误,但无法针对EF执行。匿名类型不会在EF中被跟踪,并且与您的模型完全分离,因此它将在没有任何问题的情况下工作。这些限制可能引入了EF的更高版本,您可能使用了旧的示例代码 不能直接投影到模型类型中。尝试使用annonymous类型或DTO,即数据传输对象 注释型 然后,您需要更新PartialView,以支持新的DTO,而不是单位度量模型 更新 这是一个实体框架EF限制。LINQ to entities将把您的LINQ查询转换为命令树查询,该查询将针对EF执行以返回对象 从ObjectContext构造ObjectQuery实例。 使用 ObjectQuery实例。 将LINQ标准查询运算符和表达式转换为命令 树。 以命令树表示形式对数据执行查询 来源执行期间在数据源上引发的任何异常都是 直接传递给客户机。 将查询结果返回给客户端。
在构建可以针对EF执行的命令树时有一些限制,因此直接投影到模型类型不支持EF。这意味着您的LINQ查询没有错误,但无法针对EF执行。匿名类型不会在EF中被跟踪,并且与您的模型完全分离,因此它将在没有任何问题的情况下工作。这些限制可能引入了EF的更高版本,您可能使用了旧的示例代码 EF6不允许在查询中使用新的SomeEntityType。删除Select或创建另一个非实体类a.k.a.DTO、ViewModel等。EF6不允许在查询中使用新的SomeEntityType。删除选择或创建另一个非实体类a.k.a.DTO、ViewModel等。谢谢。匿名类型有效。然而,我仍然不明白为什么它会起作用。如果你不介意的话,你能给我解释一下吗?谢谢。匿名类型有效。然而,我仍然不明白为什么它会起作用。如果你不介意的话,你能给我解释一下吗?
List<Unit_Of_Measurement> list = db.Unit_Of_Measurement.Where(x=>x.name.Contains(SearchText) && x.is_deleted == 0).Select(x => new { name = x.name}).ToList().Select(x => new Unit_Of_Measurement { name = x.name}).ToList();
public class UnitOfMeasurementDTO
{
public string Name { get; set; }
}
var list = db.Unit_Of_Measurement.Where(x=>x.name.Contains(SearchText) && x.is_deleted == 0).Select(x => new UnitOfMeasurementDTO { Name = x.name}).ToList();