【问题标题】:c# Web API Query SQLc# Web API查询SQL
【发布时间】:2015-11-10 13:32:01
【问题描述】:

我有一个由 SQL DB 支持的 Web API 2 项目。我有一个表 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&gt;.Models.UserAlerts' cannot be constructed in a LINQ to Entities query.".

任何建议都将不胜感激,我希望问题很清楚!

【问题讨论】:

    标签: c# sql asp.net linq


    【解决方案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();;
    

    如果您要实现的数据比您要转换的数据多得多,那么这会导致性能下降,所以要小心。

    【讨论】:

    • 物超所值,optino one 就像魅力一样,谢谢!我的旧后端是 php 和 mysql,这对我来说是浑水;)
    【解决方案2】:

    “无法在 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();
    

    【讨论】:

      猜你喜欢
      • 2020-06-09
      • 1970-01-01
      • 2015-06-26
      • 2018-08-08
      • 1970-01-01
      • 2018-12-17
      • 2014-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多