我有一些会计应用程序,它允许创建文档并为其添加一些位置(行/行)。 这里的控制器来获得特定文档的那些行:结合不同的查询
public JsonResult GetIncDocDetails(long id, int pagesize, int pagenum)
{
var dbResult = db.fooIncDocDetail.Where(d => d.DocumentID == id).Where(d => d.RecordStatusID != 2).Include(f => f.fooFood).
OrderBy(d => d.Date).
Select(s => new
{
s.IncDocDetailID,
s.FoodID,
s.MeasureUnit,
s.Amount,
s.Price,
s.VATRate,
s.Excise,
s.DocumentID,
s.UserID,
s.RecordDate,
s.RecordStatusID,
s.Date,
s.FoodName,
s.DetailNumber,
fooFoodName = s.fooFood.Name
}).Skip(pagesize * pagenum).Take(pagesize);
return Json(dbResult, JsonRequestBehavior.AllowGet);
}
所以,我想通过这个控制器,如一些更多的信息:
这个特殊的文件中的所有行的总和:
Summa = db.fooIncDocDetail.Where(d => d.DocumentID == id). Where(d => d.RecordStatusID == 1). Sum(a => (decimal?)(a.Amount* a.Price)) ?? 0;
这个特殊的文件中的所有行的总计数:
这个特殊的文件Total = db.fooIncDocDetail.Where(d => d.DocumentID == id). Where(d => d.RecordStatusID != 2) .Count()
属性:
Document = db.fooDocument.Where(d => d.DocumentID == id). Select(d => new { d.DocumentID, d.DocDate, d.RegNumber, d.UserID, d.RecordDate, d.RecordStatusID, d.RegistrationDate, d.Number, d.Description, d.ObjectID, d.DocumentTypeID, d.ContragentName, DocumentTypeName = d.fooDocumentType.Name })
但我怎么能结合所有,在短短一个LINQ查询,这是我写的第一?谢谢
我不会尝试将所有这些查询合并成一个,而不是我想创建一个数据库中的参数化存储过程,并使用它。这可能会创造最少的开销,因为您只需发送一个查询并获得所有答案。 – Robert
“fooDocument”和“fooInDocDetail”不相关吗?它们之间不应该有关系,所以你可以用'.Include()'加载所有相关的实体?既然你想要所有的细节,那么在数据库中执行聚合就不会使* all *有多大意义。一旦你在客户端上有数据,你就可以执行你想要的任何类型的聚合。 –