1

我有一个名为 Drivers 的表,设置如下:

ID    QuoteID   Name   Amount
1     1         jim    100
2     1         bob    200

可能存在 1 行或多行具有不同 PK (ID) 但具有相同外键 (QuoteID) 的情况。在任何一种情况下,我都想获取所有具有给定 QuoteID 的人,并能够为每个人操纵“金额”下的值。

我正在使用 Razor 在 MVC 4 中工作。这是我的控制器中到目前为止的内容:

long quoteID = model.Driver.QuoteID.Value;
var driversModel = db.Drivers.Single(g => g.QuoteID == quoteID);

//amt1 should be for jim and amt2 should be for bob
double amt1 = driversModel.Amount * 1.04;
double amt2 = driversModel.Amount * 1.05;
double total = amt1 + amt2;

有人可以在正确的方向上推动我吗?我是否应该使用其他“.Single”来获得这些金额?

4

2 回答 2

3

Single()得到一行。用于Where()获取满足查询的所有行。

IEnumerable<Drivers> driversModel = db.Drivers.Where(g => g.QuoteID == quoteID);

// SingleOrDefault - default value if that element is not found.
Driver jim = driversModel.SingleOrDefault(x => x.Name == "jim");
Driver bob = driversModel.SingleOrDefault(x => x.Name == "bob");

double jimsAmount = jim.Amount ?? 0;
double bobsAmount = jim.Amount ?? 0;

double amt1 = jimsAmount * 1.04;
double amt2 = bobsAmount * 1.05;
double total = amt1 + amt2;

// Project to a list of doubles.
List<double> amounts = driversModel.Select(x => x.Amount);

// Sum amount property on Driver.
double sum = driversModel.Sum(x => x.Amount);
于 2013-10-08T20:14:33.167 回答
0

var driversModel = db.Drivers.Where( d => d.QuoteID == quoteID )返回具有指定的所有驱动程序记录quoteID

然后,您需要在获得金额乘数、乘以.AmountSUM结果的任何地方加入。

于 2013-10-08T20:15:02.373 回答