我在SQL中有以下查询,我想将其转换为LINQ:
select profile_id from t
where child_id in (1, 2 ,3, ...) //this will be a list of integers CHILDREN
group by profile_id
having count(distinct child_id) = 3
我在如何将我的sql查询中的最后一行写入linq时遇到了困难。以下是我到目前为止的工作:
public IQueryable<ProfileChildRelationship> GetPCRelByCids(List<int> children)
{
var query = from pcr in this._entities.ProfileChildRelationships
where children.Contains(pcr.pcChildIDF)
group pcr by pcr.pcProfileIDF into g
??? having ...?
select pcr;
return query;
}
我认为可能主要的问题是,许多人将sql语句转换为linq语句,但在我的情况下,我认为不可能在linq语句组之后写另一个地方!
更新
情况:我有很多孩子,每个孩子有很多不同的个人资料,(有些可能是相同的)。用户将选择一些子项,我希望从中获取它们的公共配置文件。也就是说,如果为每个孩子找到了配置文件X,那么,如果找到除了一个孩子以外的每个孩子的配置文件Y,那么它将无效!
答案 0 :(得分:10)
听起来你想要一个where
条款......
var query = from pcr in this._entities.ProfileChildRelationships
where children.Contains(pcr.pcChildIDF)
group pcr by pcr.pcProfileIDF into g
where g.Select(x => x.ChildId).Distinct().Count() == 3
select g.Key; // This is the profile ID