6

LINQ に変換したい SQL に次のクエリがあります。

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;
    }

主な問題は、多くの人が having sql ステートメントを where linq ステートメントに変換することだと思いますが、私の場合、group by linq ステートメントの後に別の where を書くことはできないと思います!

アップデート:

状況: 私には多くの子供がいて、それぞれが多くの異なるプロファイルを持っています (いくつかは同じかもしれません)。ユーザーはいくつかの子供を選択し、そこから共通のプロファイルを導き出します。つまり、すべての子に対してプロファイル X が見つかった場合は取得できますが、1 人を除くすべての子に対してプロファイル Y が見つかった場合は無効になります。

4

1 に答える 1

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
于 2012-05-01T13:33:45.123 に答える