我正在尝试创建一个我的数据库的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 =>
答案 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
条件应检查PAYMENT
是null
。Class
而不是CLASS
,Payment
而不是PAYMENT
)。见Microsoft Naming Guidelines。