2 つのコレクションでクエリをフィルター処理する必要があります。
linqクエリをフィルタリングするために必要なIDのリストがあります
コレクションはこんな感じ
<table1_id, table2_id>
そして、コンテクストは次のようになります
idList = <1,10>,<2,12>
クエリは次のようになります
Dim l = (From t1 In Table1
Join t2 In Table2 ON t1.table1_id Equals t2.table2_id
Where idList.Contains(idList.table1_id) and idlist.Contains(idList.table2_id))
問題は、これがクロス結合のように機能するため、すべての組み合わせを取得することです。
このクエリのように 2 つのコレクション フィルターを作成するにはどうすればよいですか
Select * from
table1 t1 Inner join table2 t2 on t1.ID = t2.ID
where t1.ID in (1,2)
and t2.ID in (10, 12)
これが私のコードの実際の例です:
SQL クエリ:
Select * from
dbo.v_MARKET_BUSINESS_ROLES mbs
Inner join dbo.SAP_COMPONENT brs
on mbs.BUSINESS_ROLE_ID = brs.BUSINESS_ROLE_ID
and mbs.erd in ('1','2')
and brs.ID in (10,12)
where
brs.market_id = 1
コード:
選択したロールには 1 と 2 の 2 つの ID があるため、リストから選択したロールのみを収集します
Dim businessRolesIDs = (From olc In ctx.organization_level_constraint
Where selectedOrgLevels.Contains(olc.organization_level_id) _
AndAlso olc.market_id = marketId _
AndAlso selectedRoles.Contains(olc.business_role_id)
Select olc.business_role_id, olc.sap_component_id).Distinct.ToList
here I try to filter by the collection returned above
Dim marketBusinessRolesCollection = (From m In ctx.GetMarketBusinessRolesFromView(marketId) _
Join bs In ctx.business_role_sap_component On m.C_BUSINESS_ROLE_ID Equals bs.business_role_id _
Where (From item In businessRolesIDs Select item.business_role_id).Contains(m.C_BUSINESS_ROLE_ID) _
And (From item2 In businessRolesIDs Select item2.sap_component_id).Contains(bs.sap_component_id) _
And bs.market_id = marketId _
Select New BusinessRole With _
{
.BusinessRoleId = m.ERD
}).Distinct.ToList