[英]How to loop over rows using raw sql queries in EF 6?
如何从下面的查询中获取值并遍历它们? 查询返回一个计数。
var quantities = db.Database.SqlQuery<List<string>>
(@"SELECT Quantity
FROM Runlist WHERE(UserId = @userid)
GROUP BY Quantity", new SqlParameter("@userid", user.Id)).ToList();
foreach (var qty in quantities)
{
}
这是查询的结果。
Quantity
---------
1250
1750
2500
5000
5250
6250
11500
12250
12500
15500
17000
164250
像这样替换查询以获取数量计数
List<string> quantities = new List<string>();
quantities = db.Database.SqlQuery<List<string>>
(@"SELECT Quantity
FROM Runlist WHERE(UserId = @userid)
GROUP BY Quantity", new SqlParameter("@userid", user.Id)).ToList();
foreach (var qty in quantities)
{
// get value here
}
查询呼叫对我来说似乎是错误的。 方法Database.SqlQuery <T>将返回IEnumerable <T>-因此,在您的情况下,它将接收IEnumerable <List <string >>,最终的ToList()将投影为List <List <string >>。
当您遍历List <List <string >>时,每个项目都是List <string>,我只能想象到当EF6将您的字符串值显示为列表时,您得到的值有些奇怪(也许是一个字符数)。
答案可能是改为执行Database.SqlQuery <string>。 就像其他人说的那样,如果您不想使用不同的数量,请从SQL中删除GROUP BY Quantity。
var quantities = db.Database.SqlQuery<string>
(@"SELECT Quantity
FROM Runlist WHERE(UserId = @userid)
GROUP BY Quantity", new SqlParameter("@userid", user.Id)).ToList();
foreach (var qty in quantities)
{
Console.WriteLine("Quantity = " + qty);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.