2015-11-10 88 views
0

我有一個支持SQL DB的Web API 2項目。我有一個表UserAlerts,其中包含Lat,Lon,Timestamp,UserID字段。c#Web API查詢SQL

我有一個UserAlert控制器和UserAlert模型,其中的字段與Db中字段的值和類型相匹配。查詢數據庫並返回包含來自客戶端的UserID = UserID的行的JSON對象的正確方法是什麼?

我已經試過

List<UserAlerts> userAlerts = await db.UserAlerts.Where(x => x.UserID == UserID) 
      .Select(x => new UserAlerts 
      { 
       Lat = x.Lat, 
       Lon = x.Lon, 
       TimeTriggered = x.TimeTriggered, 
       TimeEnded = x.TimeEnded, 
       UserID = x.UserID 
      }).ToListAsync(); 

但是,當然,我得到"The entity or complex type ',namespace>.Models.UserAlerts' cannot be constructed in a LINQ to Entities query.".

任何意見,將不勝感激,我希望這個問題是清楚的!

回答

1

如果類型相同(它們都被稱爲UserAlert畢竟......),那麼您是否需要.Select()條款呢?嘗試:

List<UserAlerts> userAlerts = await db.UserAlerts 
             .Where(x => x.UserID == UserID) 
             .ToListAsync(); 

如果類型其實都是不同的,那麼你就可以兌現收集第一轉變之前:

List<UserAlerts> userAlerts = await db.UserAlerts 
             .Where(x => x.UserID == UserID) 
             .ToListAsync() 
             .Select(x => new UserAlerts 
              { 
               Lat = x.Lat, 
               Lon = x.Lon, 
               TimeTriggered = x.TimeTriggered, 
               TimeEnded = x.TimeEnded, 
               UserID = x.UserID 
              }) 
             .ToListAsync();; 

如果你正在物化是相當多這會導致性能命中數據而不是你正在轉化的數據,所以要小心。

+0

邦上錢,optino一個作品就像一個魅力,謝謝!我的老後端是用mysql做的php,對我來說這些都是黑暗的水域;) – anthonyhumphreys

0

隨着

「的實體或複雜類型」,命名空間> .Models.UserAlerts'不能在LINQ構造成實體的查詢」。

這是因爲在您的上下文中有一個名爲'UserAlerts'的表/類。你應該選擇匿名方式如下

List<UserAlerts> userAlerts = await db.UserAlerts.Where(x => x.UserID == UserID) 
     .Select(x => new 
     { 
      Lat = x.Lat, 
      Lon = x.Lon, 
      TimeTriggered = x.TimeTriggered, 
      TimeEnded = x.TimeEnded, 
      UserID = x.UserID 
     }).ToListAsync();