我正在为SQL Server 2012和IQueryOver使用NHibernate 3.3.1.4000
和FluentNHibernate 1.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
和Bar
子项的所有Baz
个entites。
我知道如何通过LINQ查询(IQueryable)
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 =&gt; x,value(DistinctItemComparer))':方法'System.Linq.Queryable.GroupBy的重载'目前不受支持。
那么,也许存在其他解决方案(使用IQueryOver
,可能?)来获取重复条目。不要放弃它们并获得明显的。我想要完全相同的重复。
答案 0 :(得分:1)
这应该有效:
var fooData = (from foo1 in Session.Query<Foo>()
from foo2 in Session.Query<Foo>()
where foo1.Id != foo2.Id
&& foo1.Bar.Id == foo2.Bar.Id
&& foo1.Baz.Id == foo2.Baz.Id
select foo1).Distinct().ToList();