1

エンティティ フレームワークで 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);
4

1 に答える 1

1

Enumerable.Empty<T>()Linq to Entities プロバイダーは、クエリを SQL に変換しようとするときに 何をすべきかを知りません。

アップデート:

私はこれがうまくいくと信じています:

Specialties = new string[]{}.AsQueryable()
于 2013-10-21T19:24:46.353 に答える