我希望过滤数据集中的数据,就像您一样where <value> in (select <value> from other_table where year=2016)
所以我有一个&#34;值列表&#34;:
var BUs = (from b in dc.BusinessUnits
where b.Year == int.Parse(ddlYears.SelectedValue)
orderby b.BuName
select new { b.BUID }).ToList();
所以我需要做的是根据BU变量中返回的BUID列表过滤这个数据集。
IQueryable<Market> markets = (from p in dc.Markets
orderby p.MarketName
select p);
帮助?我是linq的新手,所以我需要一个简洁的解决方案。
答案 0 :(得分:0)
如果{ length: 1000 }
实体具有Market
属性,并且此属性是原始类型(BUID
,int
..)或{{1你可以使用Contains
方法:
string
答案 1 :(得分:0)
在内存ID列表中过滤的标准方法是使用方法。但是你需要首先确保你的列表包含id - 你写它的方式它将包含一个名为BUID
的属性的匿名类型,通过更改第一个查询这样
int year = int.Parse(ddlYears.SelectedValue);
var BUIDs = (from b in dc.BusinessUnits
where b.Year == year
orderby b.BuName
select b.BUID).ToList();
然后使用
var markets = (from p in dc.Markets
where BUIDs.Contains(p.BUID)
orderby p.MarketName
select p);
但请注意,这将是低效的。更好的选择是不使用BUID列表进行过滤,而是将2个查询组合在一起,这样整个事情就变成了在数据库中执行的单个查询,就像这样
var markets = (from p in dc.Markets
where dc.BusinessUnits.Any(bu => b.Year == year && b.BUID == p.BUID)
orderby p.MarketName
select p);
这相当于,如果使用你的话,就像你一样做&#34;其中(从other_table中选择年份= 2016)&#34;