エンティティ フレームワークで 2 つのリストを結合したい。ユニオン部分の 1 つにコレクションがあり、もう 1 つのコレクションは空です。コレクションを空にしようとしていますが、うまくいきません...
var query = Context.Assignments.AsQueryable();
var workItemQuery = Context.WorkItems.AsQueryable();
var assigments = query.Select(o => new WorkItemAssignment()
{
EndDate = o.WorkItem.EndDate,
StartDate = o.WorkItem.StartDate,
IsExternal = o.Resource.IsExternalEmp ? Resources.External : Resources.Internal,
ResourceAssignedName = o.Resource.FirstName + " " + o.Resource.LastName,
RoleName = o.Role.Name,
Specialties = o.AssignmentSpecialties.Select(a => a.Specialty.Name),
WorkItemName = o.WorkItem.Name,
WorkItemOwner = o.WorkItem.OwnerResource.FirstName + " " + o.WorkItem.OwnerResource.LastName,
WorkItemStatus = o.WorkItem.WorkItemStatus.Name,
Days = o.Days.Value,
Percentage = o.Percentage.Value,
RequestId = o.WorkRequestAllocationId != null && o.WorkRequestAllocationId != Guid.Empty ? o.WorkRequestAllocation.WorkRequest.RequestId : (int?) null
});
var workItemAssignments = workItemQuery.Select(o => new WorkItemAssignment()
{
EndDate = o.EndDate,
StartDate = o.StartDate,
IsExternal = "N/A",
ResourceAssignedName = "N/A",
RoleName = "N/A",
RoleProficiency = "N/A",
Specialties = Enumerable.Empty<string>().AsQueryable(), //DO NOT WORK !!!
WorkItemName = o.Name,
WorkItemOwner = o.OwnerResource.FirstName + " " + o.OwnerResource.LastName,
WorkItemStatus = o.WorkItemStatus.Name,
Days = null,
Percentage = null,
RequestId = null
});
return assigments.Union(workItemAssignments);
エラーメッセージ:
LINQ to Entities はメソッド 'System.Collections.Generic.IEnumerable`1[System.String] EmptyString' メソッドを認識せず、このメソッドをストア式に変換できません。
2 つのクエリからプロパティ「Specialities」を削除すると、機能します...
編集:
最初の答えのために、リストを具体化せずに維持するには、エンティティコンテキストにとどまる必要があることを明確にしたいと思いますIQueryable
。私の剣道グリッドはフィルタリング/ページングを行っており、IQueryable
.
更新 2:
@Moho のソリューションを使用した後、IEqualityComparer
私のコレクションが 2 つのクエリ間の比較から削除されただけでした。
return assigments.Union(workItemAssignments ,assignmentEqualityComparer);