在LINQ中使用Select Statment

时间:2017-06-29 09:54:26

标签: c# entity-framework linq

我使用此代码从EntityFrameWork中的数据库加载数据,但它向我显示了此错误。

  

无法在LINQ to Entities查询中构造实体或复杂类型“DatabaseModel.State”。

public class StateRepository : BaseRepository
{
    public IQueryable Where(System.Linq.Expressions.Expression<Func<Models.DomainModels.State, bool>> predicate)
    {
        return db.States
            .Where(predicate)
            .Select(states => new State
            {
                Id = states.Id,
                Country_Id = states.Country_Id,
                Name = states.Name,
                PhoneCode = states.PhoneCode
            });
    }
}


var objStateRepository = new StateRepository();
datagrideview1.DataSource = objStateRepository.Where(p => p.Name.Contains(txtSearchState.Text)).ToList();

1 个答案:

答案 0 :(得分:1)

您无法将项目创建为由EF映射的实体,而是使用匿名类型:

return db.States
            .Where(predicate)
            .Select(states => new
            {
                Id = states.Id,
                Country_Id = states.Country_Id,
                Name = states.Name,
                PhoneCode = states.PhoneCode
            }).ToList()

然后,您可以使用State

实现数据实现后,使用另一个选择来创建ToList()的实例

另一种选择是创建一个类(例如DTO)并在投影语句中使用。