我正在尝试为我的数据库创建一个 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
而不是CLASS
,Payment
而不是PAYMENT
(。请参阅Microsoft命名准则。