[英]How to check if a child table contains a particular record
我有一个成员对象objMember。 我是从LINQ得到的
Dim objMember = (From m In db.Members
Where m.LoginName = System.Web.HttpContext.Current.User.Identity.Name
Select m).First
成员具有SignUps - 一个多对多表,用于链接MemberID和ClassID
我有一个ClassID - 一个整数
看来我应该能够查询objMember.SignUps,看看它是否有objMember.MemberID + ClassID。 而且似乎我不应该再次查询数据库以获得这个答案。 当我打破我的代码并检查objMember.SignUps时,我发现它似乎将它们放在内存中。
我试过这个,但它总是返回False。
Dim su As New SignUp
su.ClassID = ClassID
su.MemberID = objMember.MemberID
If objMember.SignUps.Contains(su) Then
检查objMember.SignUps以查看它是否具有特定的SignUp记录的正确方法是什么?
您必须在创建之前设置查询的加载选项:
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Member>(m => m.SignUps);
db.LoadOptions = dlo;
否则延迟加载查询将不会加载子选项。 对要使用主查询加载的每个子对象执行此操作。
另一种方法是在查询中的两个表上进行显式join
。 这将撤回您需要的数据。
你的测试:
If objMember.SignUps.Contains(su) Then
是错的。 这是检查您创建的新对象是否在列表中 - 它不是。 您需要使用Any
方法:
If objMember.SignUps.Any(s => s.ClassID == ClassID && s.MemberID == objMember.MemberID) Then
这将检查集合中是否存在具有这些属性的任何对象。
因为Contains
将进行对象比较以查看objMember.Signups
是否具有su
,所以它将始终返回false。
您可以使用包含的重载来指定ClassID和MemberID,也可以使用其他LINQ表达式,例如
From s in signups
Where s.ClassID == ... && s.UserID == ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.