2013-10-21 85 views
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到實體無法識別方法 「System.Collections.Generic .IEnumerable`1 [System.String] EmptyString'方法,並且此方法無法轉換爲 存儲表達式。

當我從2個刪除查詢屬性「專業」,它的工作原理...

編輯:

因爲第一個答案,我想澄清,我真的需要留在實體環境中保持我的IQueryable沒有我的列表實現。我的Kendo網格正在做一些過濾/分頁,我想發送一個IQueryable

更新2:

使用@Moho的解決方案後,它唯一缺少的IEqualityComparer從2個查詢之間進行比較打消了我的收藏。

return assigments.Union(workItemAssignments ,assignmentEqualityComparer); 
+0

它是任何其他默認值的選項,只是沒有設置該屬性,讓它爲空,或者它會? – Servy

+0

post'workItemQuery' – Moho

+0

我已經添加了workItemQuery。之後也有一些過濾,但在這種情況下,這並不重要。 – Hemadeus

回答

1

的LINQ到實體提供者不知道該怎麼做Enumerable.Empty<T>()當它試圖查詢轉換爲SQL。

更新:

我認爲這應該工作:

Specialties = new string[]{}.AsQueryable() 
+0

我不能真的需要我的IQueryable,因爲我的劍道網格正在進行過濾,我不想在過濾完成之前生成查詢 – Hemadeus

+0

而且我明白提供者不知道什麼是「Enumerable.Empty 」我可以閱讀錯誤消息。我只需要另一種方式來做一個空列表來強制2個查詢的聯合 – Hemadeus

+0

嘗試更新解決方案 – Moho