Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Ruby Sequel相当于LINQ到SQL选择匿名对象_C#_Ruby_Linq_Sequel - Fatal编程技术网

C# Ruby Sequel相当于LINQ到SQL选择匿名对象

C# Ruby Sequel相当于LINQ到SQL选择匿名对象,c#,ruby,linq,sequel,C#,Ruby,Linq,Sequel,我有一些带有LINQ查询的C代码,我正试图将其翻译成Ruby,并使用Sequel作为我的DB ORM。linq查询只执行一些联接,然后返回一个匿名对象,其中包含对联接实体的引用。我已经对代码进行了正确的翻译和操作,但它只返回每个表中的所有列,我希望将每一组列包装到它自己的对象中,类似于在C代码中的处理方式 LINQ查询 from s in slots join tu in _dbContext.table_usages on s.id equals tu.slot_id join r in _d

我有一些带有LINQ查询的C代码,我正试图将其翻译成Ruby,并使用Sequel作为我的DB 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作为反向过滤器运行。

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

.filter('table_usages.reservation_id is not null')
.filter('reservations.state != ?', ReservationStates.cancelled)
您可以通过以下方式处理:

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

排除作为一个反向过滤器运行。

我不是,我更多的是指第一行,但排除调用很好。我把它们改成了一个带{}的过滤器来反转它,但是这更好,不知道为什么我没有想到,我不是,我更多的是指第一行,很好的排除调用。我已经把它们改成了一个带{}的过滤器来反转它,但这要好得多,不知道为什么我没有想到这一点