【问题标题】:Only parameterless constructors and initializers are supported in LINQ to EntitiesLINQ to Entities 仅支持无参数构造函数和初始化程序
【发布时间】:2012-11-25 09:11:17
【问题描述】:

我不想每次都初始化每个字段,我想在构造函数中都进行initsilizirovat,有可能吗?

 var districts = _districtRepository.FindBy(d => d.CityID == id).Select(d => new DistrictViewModel(d)).ToList();

型号:

public class DistrictViewModel
{
    public Int32 ID { get; set; }
    public String Name { get; set; }

    public DistrictViewModel()
    {

    }

    public DistrictViewModel(District district)
    {
        if (district != null)
        {
            ID = district.ID;
            Name = district.Name;
        }
    }
}

【问题讨论】:

    标签: c# linq linq-to-entities


    【解决方案1】:

    你可以这样做:

    var districts = _districtRepository.FindBy(d => d.CityID == id)
                                       .AsEnumerable()
                                       .Select(d => new DistrictViewModel(d))
                                       .ToList();
    

    在这种情况下,您的语句 .Select(d => new DistrictViewModel(d)) 是 linq-to-object 语句,而不是 linq-to-entity,它将起作用。

    【讨论】:

    • 应该是AsEnumerable()。有一个 Observable.ToEnumerable 扩展方法,但不是要调用的方法。
    • 我假设 IQueryable -> AsEnumerable 不会影响性能 - 因为 Enumerable 仍然只在被击中时评估?就像您使用 IQueryable -> ToList 时一样 - 立即触发执行?我说的对吗?
    • AsEnumerable 对性能有影响,但不是立竿见影的。当您使用 AsEnumerable 时,它​​之后的所有内容都将在客户端执行,并且不会转移到数据库查询中。但在这种情况下,性能影响并没有那么大。此查询获取整行 District,但它确实只需要 ID 和 Name 两个字段。
    猜你喜欢
    • 2014-07-17
    • 2015-07-31
    • 1970-01-01
    • 2013-06-26
    相关资源
    最近更新 更多