[英]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
条件应该检查PAYMENT
为null
。 Class
代替CLASS
, Payment
代替PAYMENT
)。 请参阅Microsoft命名准则 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.