我一直有一个问题,涉及过滤一个列表基于3种不同类型的列表来源。
假设我有一个很大的清单,涵盖了美国的每一家医院。所以我有3张表格,一张显示每个州所有医院的州表,一张显示每个州城市里所有临终关怀的城市表,以及一张zipcode表,其中我显示了所有医院的邮政编码。
下面是我搜索的几个场景:
到目前为止,我的情况如下:
(from hospitals in context.Hospitals)
where HospitalIDsByState.Contains(hospitals.state) &&
HospitalIDsByCity.Contains(hosptials.city) ||
HospitalIDsByZipcodes(hospitals.zipcode)
select hospitals)我这里的问题是,如果我选择了州,但我的城市是空的,我不需要任何结果,我需要它被过滤,如果只选择州,我可以得到一个列表,如果选择城市,那个州的列表被过滤,如果选择邮政编码,它包括搜索结果中的医院列表。
发布于 2014-02-21 17:57:57
由于延迟执行,您可以更动态地将查询组合在一起:
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;这里的优点是,只有相关的查询部分被推送到数据库中,并且您不会最终检查不需要检查的内容。
https://stackoverflow.com/questions/21941612
复制相似问题