2012-01-26 114 views
0

我有搜索問題。 所以,我有任務實體和所有者實體。他們處於多對多的關係中。 我的目標 - 找到一些所有者的所有任務。在實體框架數據模型中,沒有關係表作爲優秀實體。 我創建了linq-filter表達式,但是我不能在其中包含所有者的規則。我試圖使用一些lambda表達式,但編譯器要求我使用簡單的類型,沒有「所有者」。Linq查詢具有多對多關係的搜索實體

  Expression<Func<Task, bool>> filter = e => 
       (String.IsNullOrEmpty(filterData.Title) || e.Title.StartsWith(filterData.Title)) 
       && (isDueDateSkipped || (DateTime.Compare(dueDate, e.DueDate ?? now) == 0))      
       && (isCloseDateSkipped || (DateTime.Compare(closeDate, e.CloseDate ?? now) == 0)) 
       && (isTypeSkipped || e.Type.Id == typeId) 
       && (isStatusSkipped || e.Status.Id == statusId) 
       && (isPrioritySkipped || e.Priority.Id == priorityId) 
       && (isMemberSkipped || e.Member.Id == memberId); 

你能幫我嗎?

回答

0

我發現我的問題的答案:

Expression<Func<Task, bool>> filter = e => 
        (String.IsNullOrEmpty(filterData.Title) || e.Title.StartsWith(filterData.Title)) 
        && (isDueDateSkipped || (DateTime.Compare(dueDate, e.DueDate ?? now) == 0)) 
        && (isCloseDateSkipped || (DateTime.Compare(closeDate, e.CloseDate ?? now) == 0)) 
        && (isTypeSkipped || e.Type.Id == typeId) 
        && (isStatusSkipped || e.Status.Id == statusId) 
        && (isPrioritySkipped || e.Priority.Id == priorityId) 
        && (isMemberSkipped || e.Member.Id == memberId) 
        && (isOwnerSkipped || e.Owners.Select(o => o.Id).Contains(ownerId)); 
     return filter; 
0

我假定e是一個任務:

Expression<Func<Task, bool>> filter = e => 
      (String.IsNullOrEmpty(filterData.Title) || e.Title.StartsWith(filterData.Title)) 
      && (isDueDateSkipped || (DateTime.Compare(dueDate, e.DueDate ?? now) == 0))      
      && (isCloseDateSkipped || (DateTime.Compare(closeDate, e.CloseDate ?? now) == 0)) 
      && (isTypeSkipped || e.Type.Id == typeId) 
      && (isStatusSkipped || e.Status.Id == statusId) 
      && (isPrioritySkipped || e.Priority.Id == priorityId) 
      && (isMemberSkipped || e.Member.Id == memberId) 
      && (isOwnerSkipped || TaskOwners.Where(to => to.TaskID == e.TaskID && to.OwnerID == ownerFilter.OwnerID).Count() > 0); 

希望這有助於

+0

我有一個錯誤:**指定的類型成員「 TaskOwners'在LINQ to Entities中不受支持。** –

+0

這是多對多關係表的實體名稱嗎?我給你的東西大多是一個你可能需要適應你的代碼的scetch。 – hyp