LINQ/Entity框架:无参数构造函数问题

Pie*_*rto 2 c# linq parameters entity-framework

为什么这会给我无参数的构造函数错误?

ObservableCollection<ArchivioErogazioniForList> tempHP = new ObservableCollection<ArchivioErogazioniForList>();

var erogazioniFiltrate = from r in MainWindow.dbContext.ArchivioErogazioni
                             where termToFind.Contains(r.IDTER.Value) && r.DATA_EROG >= test
                             select r;
tempHP = new ObservableCollection<ArchivioErogazioniForList>(erogazioniFiltrate.Where(x => x.DATA_EROG >= test).Select(x => new ArchivioErogazioniForList(x)));
Run Code Online (Sandbox Code Playgroud)

虽然这是工作??

private ObservableCollection<ArchivioErogazioniForList> p_ListaMonitorErogazioni2;
public ObservableCollection<ArchivioErogazioniForList> ListaMonitorErogazioni2
{
    get { return p_ListaMonitorErogazioni2; }
    set { 
        p_ListaMonitorErogazioni2 = value;
        base.RaisePropertiesChanged("ListaMonitorErogazioni2"); 
    }
}

allRecords = (from r in MainWindow.dbContext.ArchivioErogazioni select r).ToList();

ListaMonitorErogazioni2 = new ObservableCollection<ArchivioErogazioniForList>(allRecords.Where(x => x.DATA_EROG >= startDate && x.DATA_EROG <= endDate).Select(x => new ArchivioErogazioniForList(x)));
Run Code Online (Sandbox Code Playgroud)

差异在哪里?第一个片段给出了错误"System.NotSupportedException:LINQ to Entities中仅支持无参数构造函数和初始值设定项."

Eup*_*ric 8

错误说明了一切.在LINQ to Objects中,可以毫无问题地调用构造函数.但在LINQ to Entities中,不能那样做.框架首先创建实例本身(例如,它需要无参数构造函数),然后设置各个属性.解决这个问题的最简单方法是AsEnumerable()在调用select之前调用.这将实现数据,因此构造函数通过LINQ to Objects调用,而不是由Entity Framework处理.像这样:

erogazioniFiltrate.Where(x => x.DATA_EROG >= test).AsEnumerable().Select(x => new ArchivioErogazioniForList(x))
Run Code Online (Sandbox Code Playgroud)