我已经看到了一些关于SO处理PHP和JSON的回复,但是使用linq正在试图解决我想要做的事情。
高级:我有两个视图,BatchList和BatchDetails。 BatchList是我数据库中所有批次的视图,而BatchDetails包含给定批次中所有订单的列表。
我正在尝试使用以下层次结构构建JSON结构:
BatchList.BatchNumber 1 Parent
BatchDetails.OrderNumber 1 Children bound by related BatchNumber 1
BatchDetails.OrderNumber 2
BatchDetails.OrderNumber 3
BatchList.BatchNumber 2 Parent
BatchDetails.OrderNumber 1 Children bound by related BatchNumber 2
BatchDetails.OrderNumber 2
BatchDetails.OrderNumber 3
我知道一旦我构建了这个,我就可以对它进行JSON编码并将其传递给我的视图进行显示。我见过这样的例子:
{
"d" : {
"results": [
{
"CategoryID": 1,
"CategoryName": "Beverages",
"Description": "Soft drinks, coffees, teas, beers, and ales",
"Products": {
"results": [
{
"ProductID": 1,
"ProductName": "Chai",
"QuantityPerUnit": "10 boxes x 20 bags"
},
// ...
// Product 2
// ...
]
}
},
// ...
// Category 2
// ...
]
}
}
目前我唯一拥有的linq表达式是:
public IQueryable<vwBatchList> AggregateBatchList(int coid)
{
var contex = new LBPEntities();
var batchList =
(from x in contex.vwBatchLists
where x.CoId == coid
select x);
return batchList;
}
然后我可以对结果进行编码并传递给网格。
但我想将它与这个引用批号的表达式联系起来:
public IQueryable<vwBatchDetail> AggregateBatchDetails(string batchNumber)
{
var contex = new LBPEntities();
var batchDetails =
(from x in contex.vwBatchDetails
where x.BatchNumber == batchNumber
select x);
return batchDetails;
}
但是从数据库中的两个相关表创建它正在逃避我。我还没有找到任何处理这个问题的好的JSON教程,所有的例子都有硬编码的层次结构。
答案 0 :(得分:1)
你可以试试这个
public IQueryable<vwBatchList> AggregateBatchList(int coid)
{
var contex = new LBPEntities();
var batchList = contex.vwBatchLists.Where(x => x.CoId == coid).Select(x => new
{
CoId = x.CoId,
...
BatchDetails = contex.vwBatchDetails.Where(d => d.BatchNumber == x.batchNumber)
});
var result = Json(batchList);
}
答案 1 :(得分:0)
我不是这方面的专家,但我相信你需要在你的linq声明中加入。见 - http://code.msdn.microsoft.com/LINQ-Join-Operators-dabef4e9
类似的东西:
var batchList = (from x in contex.vwBatchLists
join d in contex.vwBatchDetails on x equals d.CoId
where x.BatchNumber == batchNumber
select x);
这是我在没有看到数据库架构的情况下能做的最好的事情: - )