首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linq c#中的向下过滤查询

问linq c#中的向下过滤查询
EN

Stack Overflow用户
提问于 2014-02-21 17:49:53
回答 1查看 440关注 0票数 0

我一直有一个问题,涉及过滤一个列表基于3种不同类型的列表来源。

假设我有一个很大的清单,涵盖了美国的每一家医院。所以我有3张表格,一张显示每个州所有医院的州表,一张显示每个州城市里所有临终关怀的城市表,以及一张zipcode表,其中我显示了所有医院的邮政编码。

下面是我搜索的几个场景:

  • 如果我搜索两个州,纽约和加州,我会得到那些州所有医院的名单。
  • 如果我加上几个城市,纽约和洛杉矶,那么过滤器就会缩小到那些医院。
  • 如果我包括一个邮政编码,无论州或城市,就像在阿拉斯加的邮政编码,然后我显示这些(它仍然显示为纽约,纽约和洛杉矶,加利福尼亚州选择医院)。

到目前为止,我的情况如下:

代码语言:javascript
复制
(from hospitals in context.Hospitals)
 where HospitalIDsByState.Contains(hospitals.state) &&
       HospitalIDsByCity.Contains(hosptials.city) ||
       HospitalIDsByZipcodes(hospitals.zipcode)
 select hospitals)
  • HospitalIDsByState从先前的查询中筛选出的对所选状态进行筛选的ID列表
  • HospitalIDsByCity是在选定城市中筛选的查询的is列表。
  • HospitalIDsByZipcodes是在选定的邮政编码上筛选的查询的is列表。

我这里的问题是,如果我选择了州,但我的城市是空的,我不需要任何结果,我需要它被过滤,如果只选择州,我可以得到一个列表,如果选择城市,那个州的列表被过滤,如果选择邮政编码,它包括搜索结果中的医院列表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-21 17:57:57

由于延迟执行,您可以更动态地将查询组合在一起:

代码语言:javascript
复制
var query = context.Hospitals;
if (HospitalIDsByState.Any())
  query = query.Where(h => HospitalIDsByState.Contains(h.state));
if (HospitalIDsByCity.Any())
  query = query.Where(h => HospitalIDsByCity.Contains(h.city));
if (HospitalIDsByZipcodes.Any())
  query = query.Where(h => HospitalIDsByZipcodes(h.zipcode));

return query;

这里的优点是,只有相关的查询部分被推送到数据库中,并且您不会最终检查不需要检查的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21941612

复制
相关文章

相似问题

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