Linq to Entities group concat

时间:2015-10-30 09:54:28

标签: c# entity-framework linq linq-to-entities

数据库架构: 员工有多个资产。 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无法解析它。

0 个答案:

没有答案