【问题标题】:SQL to LINQ convertion with full outer join使用完全外连接的 SQL 到 LINQ 转换
【发布时间】:2016-01-27 06:10:55
【问题描述】:
SELECT* FROM Event FULL OUTER JOIN Booking ON Event.eventId = Booking.eventId
WHERE(Booking.userId = 3) AND (Booking.bookingId IS NULL) 
OR (Event.eventId IS NULL) 
OR (Booking.eventId IS NULL)

这是我到目前为止转换的内容,但是我在 "&& bookings.bookingId == null" 遇到错误

错误消息是“运算符'&&'不能应用于'int'和'bool”类型的操作数

你是怎么解决的?

            User student = (User)Session["user"];
        var db = new EMS.Models.dbEMSEntities();
        IQueryable<Event> query =  from events in db.Events
                                   join bookings in db.Bookings
                                   on events.eventId equals bookings.eventId
                                   where bookings.userId = student.userId 
                                   && bookings.bookingId == null || events.eventId == null || bookings.eventId == null

【问题讨论】:

  • 我想你首先需要放置 bookings.bookingId == null || events.eventId == null || bookings.eventId == null 括号中的 && (bookings.bookingId == null || events.eventId == null || bookings.eventId == null)
  • 您的bookings.bookingId 不可为空,请尝试将属性更改为int? 或将过滤器更改为&amp;&amp; bookings.bookingId == 0
  • bookings.userId = student.userId 这应该是 bookings.userId == student.userId 。 “==”你需要使用

标签: c# asp.net linq


【解决方案1】:
where bookings.userId = student.userId && bookings.bookingId == null || events.eventId == null || bookings.eventId == null

被评估为

where bookings.userId = (student.userId && bookings.bookingId == null) || events.eventId == null || bookings.eventId == null

因此,(int)userId && (bool)(bookingId == null) 将 int 与违反语言的 bool 进行比较 确保您使用“==”作为评估而不是分配“=”。

【讨论】:

    【解决方案2】:
       User student = (User)Session["user"];
            var db = new EMS.Models.dbEMSEntities();
            IQueryable<Event> query =  from events in db.Events
                                       join bookings in db.Bookings
                                       on events.eventId equals bookings.eventId
                                       where (bookings.userId == student.userId)
                                       && (bookings.bookingId == null) || (events.eventId == null) || (bookings.eventId == null)
    

    【讨论】:

    • 我试过你的方法,谢谢你解决了错误信息但是它没有返回任何输出你知道为什么吗?
    • 输出现在将取决于数据,从查询的意图来看,您正在寻找尚未预订任何活动的学生,但他们的用户 ID 必须仍然存在在预订表中..数据中可能不存在这种情况!
    • 能否发一下表结构和样本数据。然后只有我能弄清楚是什么问题。
    • @Phill 是的,当我尝试查询时存在数据
    猜你喜欢
    • 2015-03-31
    • 1970-01-01
    • 2012-01-06
    • 2017-06-10
    • 2011-06-10
    • 2016-12-19
    • 1970-01-01
    • 2017-07-05
    相关资源
    最近更新 更多