c# Web API Query SQL

本文关键字:SQL Query API Web | 更新日期: 2023-09-27 18:21:17

我有一个Web API 2项目,该项目由SQL数据库支持。我有一个表UserAlerts,包含字段Lat、Lon、Timestamp和UserID。

我有一个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.".

任何建议都将不胜感激,我希望问题是明确的!

c# Web API Query SQL

如果类型相同(它们毕竟都被称为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();;

如果您具体化的数据比您将其转换为的数据多得多,那么这将导致性能下降,所以要小心。

使用

无法在LINQ to Entities查询中构造实体或复杂类型",namespace>.Models.UserAlerts"。

这是因为在您的上下文中有一个名为"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();