gpt4 book ai didi

c# - Ruby Sequel 等同于 LINQ to SQL 选择匿名对象

转载 作者:太空宇宙 更新时间:2023-11-03 16:55:44 24 4
gpt4 key购买 nike

我有一些带有 LINQ 查询的 C# 代码,我正在尝试将其转换为 Ruby,并使用 Sequel 作为我的数据库 ORM。 linq 查询只是执行一些连接,然后返回一个包含对连接实体的引用的匿名对象。我已经翻译并正确运行了代码,但它只返回每个表中的所有列,我想将每组列包装在它自己的对象中,类似于在 C# 代码中的完成方式。

LINQ 查询

from s in slots
join tu in _dbContext.table_usages on s.id equals tu.slot_id
join r in _dbContext.Reservations on tu.reservation_id equals r.ReservationID
join o in _dbContext.orders on r.OrderID equals o.OrderID
join c in _dbContext.Contacts on r.ContactID equals c.ContactID
where tu.reservation_id != null &&
r.state != ReservationStates.Cancelled
select new { SlotId = s.id, Reservation = r, Order = o, Contact = c, TableUsage = tu };

ruby 代码:

select(:slots__id, :reservations.*, :orders.*, :restaurant_customers.*, :table_usages.*)
.filter(slots__restaurant_id: restaurant_id, slots__removed: false)
.filter(slots__slot_time: start_time..end_time)
.join(:table_usages, slot_id: :id)
.join(:reservations, id: :table_usages__reservation_id)
.join(:orders, id: :reservations__order_id)
.join(:restaurant_customers, id: :reservations__contact_id)
.filter('table_usages.reservation_id is not null')
.filter('reservations.state != ?', ReservationStates.cancelled)

我无法通过文档找到实现此目的的方法,但我想我会看看是否有人以我尚未想到的方式做了类似的事情。

谢谢!

最佳答案

我假设您只是指最后两行:

.filter('table_usages.reservation_id is not null')
.filter('reservations.state != ?', ReservationStates.cancelled)

您可以通过以下方式处理:

.exclude(:table_usages__reservation_id=>nil)
.exclude(:reservations__states=>ReservationStates.cancelled)

exclude 用作反向过滤器。

关于c# - Ruby Sequel 等同于 LINQ to SQL 选择匿名对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10249986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com