2017-07-21 5 views
0

私はEF Frameworkを使用してSQL DBからデータを取得しています。Entity FrameworkでLINQでINクエリを使用できません

サブリクエスト表は下記のようになります。

enter image description here

この表では「org_assigneddeptは、」別の部署表への外部キーです。

私はDepartmentsのリストをInputとして持っており、org_assigneddeptがリストと一致するDBからそれらの行だけを取り出したいとします。

私の全体のコードを見つけてください: -

private List<EventRequestDetailsViewModel> GetSummaryAssignedDeptEventRequests(List<EmpRoleDeptViewModel> vmDept) 
      { 
       List<EventRequestDetailsViewModel> vmEventRequestDeptSummary = new List<EventRequestDetailsViewModel>(); 

       RequestBLL getRequestBLL = new RequestBLL(); 
       Guid subRequestStatusId = getRequestBLL.GetRequestStatusId("Open"); 

       using (var ctxGetEventRequestSumm = new STREAM_EMPLOYEEDBEntities()) 
       { 
        vmEventRequestDeptSummary = (from ers in ctxGetEventRequestSumm.SubRequests                      
               where vmDept.Any(dep=>dep.DeptId == ers.org_assigneddept) 
               select new EventRequestDetailsViewModel 
               { 
                SubRequestId = ers.org_subreqid 
               }).ToList(); 
       } 
      } 

それは、LINQクエリ・レベルで、次のエラーを与えている: -

System.NotSupportedException:「 の一定の値を作成することができません。 'Application.Business.DLL.EmpRoleDeptViewModel'と入力します。このコンテキストでは、プリミティブ 型または列挙型のみがサポートされています。

どのように私は結果を達成することができますようあなたはSQLに部門のVMを渡すことはできません

答えて

1

、それはそれらが何であるかを知らない私に知らせてください。 SELECT文で、その後

// Extract the IDs from the view models.. Now a list of primitive types.. 
var departmentIds = vmDept.Select(x => x.DeptId).ToList(); 

...

.. 
where departmentIds.Contains(id=> id == ers.org_assigneddept) 
.. 
+0

問題の原因を特定するの答えの最初の部分は正しいです。しかし、 'Any'での使用法は、' IN(...) '変換を行うために、' Contains'( 'departmentIds.Contains(ers.org_assigneddept)' –

+0

をお手伝いします。私はContainsを使用して結果を得ましたContains()とAny()の使用には大きな違いがありますか – user1843970

+0

実体のIDに対するIDのコレクションをチェックする式なので、回答を更新する.containsと.Anyの違いは、ここで見つけることができます:https://stackoverflow.com/questions/23526773/what-is-the-difference-between-contains-and-any-インリンキュー –

関連する問題