【问题标题】:Selecting duplicates items with NHibernate IQueryOver使用 NHibernate IQueryOver 选择重复项
【发布时间】:2012-12-31 02:11:30
【问题描述】:

我正在为 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 实体,其中包含相同的 BarBaz 子项。 我知道如何通过 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 => x, value(DistinctItemComparer))':方法 'System.Linq.Queryable.GroupBy' 的重载目前不支持。

所以,也许存在其他解决方案(IQueryOver,也许?)来获取重复条目。不要丢弃它们并接收不同的东西。我只想要完全相同的副本。

【问题讨论】:

    标签: sql linq nhibernate queryover


    【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-11
      • 2011-10-16
      • 2021-06-27
      相关资源
      最近更新 更多