LINQ Lambda query with JOIN 和 WHERE 'not in'



我正在尝试为我的数据库创建一个 Lambda 查询,搜索已上课但尚未支付课程费用的学生。 我正在传入一个学生ID(数据类型字符串(并搜索CLASS和PAYMENT表,以查找CLASS表中没有匹配记录的记录的COUNT。

CLASS 表具有"学生 ID"字段和"类 ID"字段(数据类型 GUID(付款表有一个类 ID 字段(数据类型 GUID(。

我对 LINQ 和 Lambda 的新手,由于不断出现语法错误,因此还没有走得很远。 帮助将不胜感激。

int unPaidClasses =
                db.CLASS
                .Join(db.PAYMENT,
                class => class.ClassID,
                pay => pay.ClassId,
                (class, pay) => new { CLASS = class, PAYMENT = payment })
                .Where(x =>

这样的事情可能会起作用(假设哪些属性可用(:

var unpaidClasses = db.CLASS.Where(cls => 
    cls.StudentID == studentID 
    && !db.PAYMENT.Any(pmt => 
        pmt.StudentID == studenID 
        && pmt.ClassID = cls.ClassID));

假设付款也与学生相关联,这应该可以让您对没有任何匹配付款记录的任何内容IQueryable<CLASS>

以下是一些可帮助您独立解决问题的提示:

  • class是一个保留词。不要使用它来命名变量。请改用cls或其他一些有效的标识符。
  • 您需要左Join,因为您正在寻找缺少付款记录的课程。以下是使用流畅语法完成的方法;注意DefaultIfEmpty()调用。
  • Where条件应检查PAYMENT是否null
  • 不要对属性名称使用全大写字母(Class而不是CLASSPayment而不是PAYMENT(。请参阅Microsoft命名准则。

最新更新