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.".
任何建议都将不胜感激,我希望问题是明确的!
如果类型相同(它们毕竟都被称为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();