Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 无法在LINQ to Entities查询中使用lambda表达式构造实体或复杂类型_Asp.net Mvc_Linq - Fatal编程技术网

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();