我在让一些 LinQ 在 WCF 服务操作中工作时遇到问题:
[WebGet]
public IQueryable<StockItem> AllStockableItems(int LocationAddressId)
{
StockEntities svc = this.CurrentDataSource;
//get all the stock at a location
var StockAtLocation = from s in svc.Stock
where s.Location == Location
select s;
//weave it into the list of all stockable items
var StockableItems = from si in svc.StockableItems
join s in StockAtLocation on si.ItemId equals s.ItemId into tmp
select si <and somehow expand> si.Stock;
return StockableItems;
}
问题是,我不知道如何扩展返回数据中的库存?
如下所示的网址:
....my.svc/AllStockableItems?LocationAddressId=3&$expand=Stock
将扩大所有地点的库存,而不仅仅是所需的地点。这是可能的还是我最好的选择是从 Silverlight 客户端发出 2 个单独的请求并加入客户端?
非常感谢任何帮助。
是的,示例数据,很抱歉没有第一次将其放入:示例股票数据:
ItemId Location Quantity
1 1 4
1 2 3
1 3 2
2 2 6
3 3 0
7 1 3
7 2 0
示例 stockableItems 数据
ItemId <other columns>..
1
2
3
4
5
6
7
8
说 locationAddressId 参数 =2,我正在尝试让服务操作返回(不是字面意思,而是在 Atom/Pub 等效项中):
StockableItem { ItemId :1
Stock {
entry {
Stock {LocationId : 2, Qty :4}
}
}
}
StockableItem { ItemId :2 }
StockableItem { ItemId :3 }
StockableItem { ItemId :4 }
StockableItem { ItemId :5 }
StockableItem { ItemId :6 }
StockableItem { ItemId :7
Stock {
entry {
Stock {LocationId : 2, Qty :0}
}
}
}
StockableItem { ItemId :8 }
谢谢你。
[更新 2]
好的,我已经尝试了几件事;首先我试了一下:
var StockableItems = from si in svc.AllStockableItems
join s in svc.Stock on si.ItemId equals s.ItemId
where s.Location == Location
select new StockableItem
{
ItemId = s.ItemId,
Stock = new EntityCollection<Stock>
{
new Stock()
{
Location = s.Location,
Quantity= s.Quantity
}
}
};
这给了我:
The entity or complex type '...' cannot be constructed in a LINQ to Entities query
这导致我来到这里:
这导致我将查询重写为:
var StockableItems = svc.AllStockableItems
.Join(svc.Stock, si => si.ItemId, s => s.ItemId, (si, s) => si)
.ToList()
.Select(si => new StockableItem
{
ItemId = si.ItemId,
Stock = new EntityCollection<Stock>
{
new Stock()
{
Location = si.Stock.First().Location,
Quantity= si.Stock.First().Quantity
}
}
})
.AsQueryable();
它返回所有 StockableItems,但有点令人沮丧的是,它不包括任何 Stock。我只是在最后一个查询中发出了嘘声吗?我怀疑我对 Stock 实体的内部预测不正确?
再次感谢