繁体   English   中英

如何在EF 6中使用原始SQL查询遍历行?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM