第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在NHibernate中查詢每個組中的第一個條目

如何在NHibernate中查詢每個組中的第一個條目

C#
陪伴而非守候 2023-07-23 14:06:59
以下在 NHibernate 中使用 LINQ 的代碼返回與內(nèi)存中 LINQ 和 EF LINQ 不同的結(jié)果。在 NHibernate 中執(zhí)行此操作的正確方法是什么?QueryOver如果LINQ版本確實有問題的話,也可以使用。using (var session = factory.OpenSession())using (var transaction = session.BeginTransaction()){? ? for (int i = 0; i < 10; ++i)? ? {? ? ? ? session.Save(new A()? ? ? ? {? ? ? ? ? ? X = i % 2,? ? ? ? ? ? Y = i / 2,? ? ? ? });? ? }? ? transaction.Commit();}using (var session = factory.OpenSession())using (var transaction = session.BeginTransaction()){? ? //=====================================? ? var expected = session.Query<A>()? ? ? ? .ToList() // <-- copy to memory? ? ? ? .GroupBy(a => a.X)? ? ? ? .Select(g => g.OrderBy(y => y.Y).First())? ? ? ? .ToList();? ? Console.WriteLine(string.Join(" ", expected.Select(a => a.Id)));? ? //=====================================? ? var actual = session.Query<A>()? ? ? ? .GroupBy(a => a.X)? ? ? ? .Select(g => g.OrderBy(y => y.Y).First())? ? ? ? .ToList();? ? Console.WriteLine(string.Join(" ", actual.Select(a => a.Id)));}public class A{? ? public int Id { get; set; }? ? public int X { get; set; } // indexed? ? public int Y { get; set; } // indexed}預期成績1 2實際結(jié)果1 1記錄的 SQLNHibernate: select (select program_a0_.Id as id1_0_ from "A" program_a0_ order by program_a0_.Y asc limit 1) as col_0_0_ from "A" program_a0_ group by program_a0_.X完整代碼位于錯誤報告中使用 GroupBy 和 First 時出現(xiàn)錯誤結(jié)果更新2019-8-9查詢不應使用 ID。我已將其更改為非唯一屬性。如果解決方案只向 SQLite 查詢一次,我將不勝感激。
查看完整描述

1 回答

?
皈依舞

TA貢獻1851條經(jīng)驗 獲得超3個贊

最新的 NHibernate 5.3 LINQ 提供程序似乎僅支持 Select 中的聚合函數(shù)(MIN、MAX、COUNT...)用于“group by”查詢。group by 查詢不支持實體選擇。

作為一般解決方案,您可以使用以下方法使用子查詢重寫“group by”查詢:

var results = session.Query<A>()
     .Where(a => a == session.Query<A>() // Subquery on same entity
                         .Where(sa => sa.X == a.X) // Group BY key is here
                         .OrderBy(sa => sa.Y) // Order By key is here
                         .First() // First entry in group
     ).ToList();

原始“group by”查詢供參考:

var results = session.Query<A>()
    .GroupBy(a => a.X)
    .Select(g => g.OrderBy(y => y.Y).First())
    .ToList();


查看完整回答
反對 回復 2023-07-23
  • 1 回答
  • 0 關注
  • 113 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號