2017-06-29 82 views
-1

我使用此代碼從EntityFrameWork中的數據庫中加載數據,但它向我顯示此錯誤。在LINQ中使用Select Statment

實體或複雜類型'DatabaseModel.State'不能在LINQ to Entities查詢中構造。

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

你已經有一個狀態對象。你爲什麼試圖再次創建它*?按照Select(state => state)的方式返回'states'對象,或者完全省略'Select'語句'返回db.States.Where(謂詞);'。你是否想要省略某些屬性? –

回答

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)爲例,並在您的投影語句中使用。

+0

或者乾脆省略'選擇'。這個'狀態'對象*是*一個'狀態' –