首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用linq和lambda过滤两个集合

使用linq和lambda过滤两个集合
EN

Stack Overflow用户
提问于 2012-10-04 16:17:41
回答 1查看 1K关注 0票数 1

我需要通过两个集合来过滤查询。

我有一个ID列表,我需要用它来过滤linq查询

该集合如下所示

代码语言:javascript
运行
复制
<table1_id, table2_id>

内容看起来像这样

代码语言:javascript
运行
复制
idList = <1,10>,<2,12>

该查询如下所示

代码语言:javascript
运行
复制
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))

问题是,这就像一个交叉连接,所以我得到了所有的组合。

如何使两个集合筛选器像这样的查询

代码语言:javascript
运行
复制
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查询:

代码语言:javascript
运行
复制
    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

代码:

选择角色有2个id的1和2,因此我只从列表中收集选定的角色

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

发布于 2012-10-04 16:25:31

您必须选择ID列表的键和值。我知道这个集合是像List<KeyValuePair<int, int>>一样构建的

因此,您的代码应该如下所示

代码语言:javascript
运行
复制
Dim l =
    From t1 In Table1
    Join t2 In Table2 ON t1.table1_id Equals t2.table2_id
    Where (From item In idList Select item.Key).Contains(t1.table1_id)
    And (From item In idList Select item.Value).Contains(t2.table2_id);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12723074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档