使用连接在Linq中查询

时间:2010-08-12 16:17:08

标签: linq

我有一个来自sql的查询,但我似乎无法使它在linq中工作这里是来自sql server的查询:

SELECT     MembersBU.MemberID, MembersBU.MemberFirst, MembersBU.MemberLast,
           MembersBU.MemberEmail, MembersBU.ValidEmail, 
                  MembersBU.EmailCap
FROM         groupMembers INNER JOIN
                  MembersBU ON groupMembers.MemID = MembersBU.MemberID
WHERE     (groupMembers.groupID = 3) AND (MembersBU.EmailCap = 1)

这是linq查询:

 var query = from M in MembersBUs
 join GM in GroupMembers on M.MemberID equals GM.MemID
 where (GM.GroupID = 3) & (M.EmailCap = 1)
 select new {M.MemberID, M.MemberFirst, M.MemberLast, 
             M.MemberEmail, M.ValidEmail, M.EmailCap};

感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

你不能使用sql style where子句!您必须使用语言风格。看起来像c# - 你需要使用==代替:

 var query = from M in MembersBUs
 join GM in GroupMembers on M.MemberID equals GM.MemID
 where (GM.GroupID == 3) && (M.EmailCap == 1)
 select new {M.MemberID, M.MemberFirst, M.MemberLast, 
             M.MemberEmail, M.ValidEmail, M.EmailCap};

和&&而不是&。

使用此查询可能更容易 - 因为它不是匿名类型:

IQueryable<MembersBU> = from M in MembersBUs 
     where (M.GroupMember.GroupID == 3) && (M.EmailCap == 1) 
     select M;

答案 1 :(得分:0)

您只需使用&&代替&==代替=。否则,你的Linq查询对我来说似乎没问题......

答案 2 :(得分:0)

var query = from M in MembersBUs 
join GM in GroupMembers on M.MemberID equals GM.MemID 
where (GM.GroupID == 3) && (M.EmailCap == 1) 
select new {M.MemberID, M.MemberFirst, M.MemberLast,  
         M.MemberEmail, M.ValidEmail, M.EmailCap}; 

where子句使用普通的C#语法,==用于等式和&amp;&amp;逻辑AND

此外,如果您为表设置了正确的外键关系,则不需要对连接进行explcited状态。 Linq会自动推断它:

var query = from M in MembersBUs 
where (M.GroupMember.GroupID == 3) && (M.EmailCap == 1) 
select new {M.MemberID, M.MemberFirst, M.MemberLast,  
         M.MemberEmail, M.ValidEmail, M.EmailCap};