我有以下内容返回所有有孩子的记录。
var allStops = (from s in db.stop_details
where db.billing_transactions.Any(c=>c.stop_details_id == s.id)
orderby s.id
select s).ToArray();
我想知道所有包含3个孩子的记录,例如:
var allStops = (from s in db.stop_details
where db.billing_transactions.Any(c=>c.stop_details_id == s.id).Count() == 3
orderby s.id
select s).ToArray();
或
var allStops = (from s in db.stop_details
where db.billing_transactions.Count(c=>c.stop_details_id == s.id) == 3
orderby s.id
select s).ToArray();
我似乎无法使语法正确...
答案 0 :(得分:1)
由于您说两个表之间存在数据库关系,并假设billing_transactions.stop_details_id
是外键,因此您应该可以执行此类操作。
var allStops = (from s in db.stop_details
where s.billing_transactions.Count() == 3
orderby s.id
select s).ToArray();
答案 1 :(得分:1)
如果您使用EF,则应使用导航属性。根据我的看法,stop_details
和billing_transactions
之间应该有一对多的关系,因此stop_details
实体应该有一个集合导航属性(让我们称之为billing_transactions
) 。您的查询可能如下:
var allstops=db.stop_details.Where(s=>s.billing_transactions.Count()==3)
.OrderBy(s=>s.id)
.ToArray();
现在,如果您不想使用导航属性,我建议您进行group join:
var allStops = (from s in db.stop_details
join bt in db.billing_transactions on bt.stop_details_id equals s.id into bts
where bts.Count()==3
orderby s.id
select s).ToArray();
答案 2 :(得分:-1)
使用点表示法,请尝试以下示例,假设您有一个从billing_transaction到stop_details。
var allstops = db.stop_details
.Where (s=>s.billing_transactionsc.stop_details_id.Count() == 3)
.OrderBy (s => s.id)
.ToArray();