SQLServer2012とIQueryOverにNHibernate3.3.1.4000
とFluentNHibernate1.3.0.733
を使用しています
次のクラスがあります:
class Foo {
public virtual int Id;
public virtual Bar Bar;
public virtual Baz Baz;
}
class Bar {
public virtual int Id;
}
class Baz {
public virtual int Id;
}
同じ子をFoo
含むすべてのエンティティを選択したいと思います。LINQクエリ(IQueryable)によって理論的にこれを行う方法を知っていますBar
Baz
IList<Foo> fooData = Session.Query<Foo>.GroupBy(x => x, new DistinctItemComparer()).Where(g => g.Count() > 1).Select(g => g.Key).ToList();
class DistinctItemComparer : IEqualityComparer<Foo>
{
public bool Equals(Foo x, Foo y)
{
return (x.Id == y.Id) || ((x.Bar.Id == y.Bar.Id) && (x.Baz.Id == y.Baz.Id));
}
public int GetHashCode(Foo obj)
{
return obj.Id.GetHashCode() ^ obj.Bar.Id.GetHashCode() ^ obj.Baz.Id.GetHashCode();
}
}
しかし、エラーが発生しました:
式を解析できませんでした'value(NHibernate.Linq.NhQueryable`1 [Foo])。GroupBy(x => x、value(DistinctItemComparer))':メソッド'System.Linq.Queryable.GroupBy'のこのオーバーロードは現在ありませんサポートされています。
したがって、重複エントリを取得するための他のソリューションが存在する可能性があります(IQueryOver
おそらく?)。それらを落とさず、明確に受け取ります。正確な複製のみが必要です。