linq获取所有行然后循环以获取值

时间:2016-04-04 09:55:01

标签: c# asp.net-mvc linq asp.net-mvc-4 razor

我认为这可能是与语法相关的问题。我想要的是查询并从数据库中获取所有记录,然后使用foreach迭代记录。

这里的问题是,如果我在linq中查询:

查询:

var balance = db.UserBalance.Where(d => d.ApplicationUserId == userId);

它永远不会识别天平中的属性来构造这样的东西:

foreach循环

foreach(var i in saldo)
{
    if(balance.value < 0)
    {
        earnings += balance.value;
    }
    else
    {
        expenses -= saldo.value;
    }
}

如果有人能给我一个提示,我将不胜感激

PS:抱歉我的英文不好

2 个答案:

答案 0 :(得分:2)

您正在获取余额列表(“所有记录WHERE x为真”),但是从您的代码中可以看出您期望获得唯一记录。

您可以使用Single

var balance = db.UserBalance.Single(d => d.ApplicationUserId == userId);

请注意,如果不保证记录存在,请使用SingleOrDefault并对余额执行空检查。

var balance = db.UserBalance.SingleOrDefault(d => d.ApplicationUserId == userId);
if (balance == null) {
    // No balance was found.
    return;
}

答案 1 :(得分:1)

这只是猜测,因为你没有展示你的表等,但你可能想要这个:

float earnings = 0;
float expenses = 0;
foreach (var balance in db.UserBalance.Where(d => d.ApplicationUserId == userId))
{
    if(balance.value < 0)
        earnings += balance.value;
    else
        expenses -= balance.value;
}

查询返回给定用户的UserBalance s枚举,这是您实际想要迭代的内容。