The entity cannot be constructed in a LINQ to Entities query

前端 未结 14 2066
失恋的感觉
失恋的感觉 2020-11-21 06:04

There is an entity type called Product that is generated by entity framework. I have written this query

public IQueryable GetProdu         


        
14条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-11-21 06:48

    if you are Executing Linq to Entity you can't use the ClassType with new in the select closure of query only anonymous types are allowed (new without type)

    take look at this snippet of my project

    //...
    var dbQuery = context.Set()
                    .Include(letter => letter.LetterStatus)
                    .Select(l => new {Title =l.Title,ID = l.ID, LastModificationDate = l.LastModificationDate, DateCreated = l.DateCreated,LetterStatus = new {ID = l.LetterStatusID.Value,NameInArabic = l.LetterStatus.NameInArabic,NameInEnglish = l.LetterStatus.NameInEnglish} })
                                   ^^ without type__________________________________________________________________________________________________________^^ without type
    

    of you added the new keyword in Select closure even on the complex properties you will got this error

    so remove the ClassTypes from new keyword on Linq to Entity queries ,,

    because it will transformed to sql statement and executed on SqlServer

    so when can I use new with types on select closure?

    you can use it if you you are dealing with LINQ to Object (in memory collection)

    //opecations in tempList , LINQ to Entities; so we can not use class types in select only anonymous types are allowed
    var tempList = dbQuery.Skip(10).Take(10).ToList();// this is list of  so we have to convert it so list of 
    
    //opecations in list , LINQ to Object; so we can use class types in select
    list = tempList.Select(l => new Letter{ Title = l.Title, ID = l.ID, LastModificationDate = l.LastModificationDate, DateCreated = l.DateCreated, LetterStatus = new LetterStatus{ ID = l.LetterStatus.ID, NameInArabic = l.LetterStatus.NameInArabic, NameInEnglish = l.LetterStatus.NameInEnglish } }).ToList();
                                    ^^^^^^ with type 
    

    after I executed ToList on query it became in memory collection so we can use new ClassTypes in select

提交回复
热议问题