繁体   English   中英

具有JOIN和WHERE'not in'的LINQ Lambda查询

[英]LINQ Lambda query with JOIN and WHERE 'not in'

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

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 =>

这样的事情可能会起作用(对可用属性进行假设):

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条件应该检查PAYMENTnull
  • 不要对属性名称使用全大写字母(用Class代替CLASSPayment代替PAYMENT )。 请参阅Microsoft命名准则

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM