数据库架构: 员工有多个资产。 1资产有1个AssetModel
我写了Linq的一个返回IQueryable的脚本
var q = from staff in this.unitOfWork.StaffRepository.Data
from asset in this.unitOfWork.AssetRepository.Data
.Where(asset => staff.Id == asset.StaffId).DefaultIfEmpty()
from assetModel in this.unitOfWork.AssetModelRepository.Data
.Where(assetModel => asset.AssetModelId == assetModel.Id).DefaultIfEmpty()
group new { staff, assetModel }
by new
{
staff.Id
,staff.Name
,AssetModelType = assetModel.Type
} into g
select new StaffQuery
{
Id = g.Key.Id,
Name = g.Key.Name
AssetStatistic = (g.Key.AssetModelType == null ? AssetType.None.ToString()
: g.Key.AssetModelType.ToString()) + g.Count()
};
我使用OData轻松过滤,排序,选择,分页数据结果。
以下是我从OData获得的内容
{
"@odata.context":"http://localhost:52052/odata/$metadata#staffs",
"value":[
{
"Id":1,
"Name":"John",
"AssetStatistic":"CaseOrLap2"
},
{
"Id":1,
"Name":"John"
"AssetStatistic":"Monitor1"
}
]
}
是否可以通过AssetModel.Type对concat进行分组,如下面的结果
{
"@odata.context":"http://localhost:52052/odata/$metadata#staffs",
"value":[
{
"Id":1,
"Name":"John",
"AssetStatistic":"CaseOrLap2, Monitor1"
}
]
}
必须返回IQueryable并且此上下文中的string.Join无效,因为Linq to Entities无法解析它。