LINQ Lambda查询与JOIN和WHERE'不在'

时间:2018-04-11 23:42:49

标签: c# linq join lambda where

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

CLASS表有一个StudentID字段和一个ClassID字段(数据类型GUID) PAYMENT表有一个ClassID字段(数据类型为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 =>

2 个答案:

答案 0 :(得分:0)

这样的事情可能有效(假设哪些属性可用):

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

假设付款也与学生相关,那么应该为IQueryable<CLASS>提供任何没有任何匹配付款记录的内容。

答案 1 :(得分:0)

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

  • class是保留字。不要用它来命名变量。请改用cls或其他有效标识符。
  • 您需要离开Join,因为您正在寻找缺少付款记录的课程。 Here is how it is done using fluent syntax;请注意DefaultIfEmpty()来电。
  • Where条件应检查PAYMENTnull
  • 不要对属性名称使用全大写字母(Class而不是CLASSPayment而不是PAYMENT)。见Microsoft Naming Guidelines