C# Lambda LINQ查询有问题
我正在尝试将以下SQL表达式转换为Lambda LINQ查询,目前我似乎在兜圈子:C# Lambda LINQ查询有问题,c#,.net,linq,lambda,C#,.net,Linq,Lambda,我正在尝试将以下SQL表达式转换为Lambda LINQ查询,目前我似乎在兜圈子: select m.MemberExternalPK FROM Member.Member AS m INNER JOIN Member.Account AS a ON m.MemberID = a.MemberID where m.MemberExternalPK in ( SELECT m.MemberExternalPK FROM Member.Member AS m INNER JOIN
select m.MemberExternalPK FROM Member.Member AS m INNER JOIN Member.Account AS a ON m.MemberID = a.MemberID where m.MemberExternalPK in
(
SELECT m.MemberExternalPK
FROM Member.Member AS m INNER JOIN Member.Account AS a ON m.MemberID = a.MemberID
group by MemberExternalPK
having Count(AccountID) = 1
)
and AccountStatusID = 3
到目前为止,我已经成功地获得了以下语法,它返回了我要查找的正确行数,但除了MemberExternalPK之外的所有列都是我想要的
Members.Join(Accounts, m => m.MemberID, a => a.MemberID, (m, a) => new { m, a })
.GroupBy(t => t.m.MemberExternalPK, t => t.a)
.Where(grp => grp.Count(p => p.AccountID != null) == 1)
.SelectMany(sublist => sublist).Where(x => x.AccountStatusID == 3)
我认为这相当接近:
var query =
from m in Member_Member
join a in Member_Account on m.MemberID equals a.MemberID
group a by m.MemberExternalPK into gas
where gas.Count(ga => ga.AccountID != null) == 1
from ga in gas
where ga.AccountStatusID == 3
select gas.Key;
唯一需要考虑的是ga.AccountID!=null,这意味着gas组可能有多个记录,因此您可能会在结尾处有多个gas.Key。类似的内容?将其拆分也可以提高性能
var externalMembers =
Members.Join(Accounts, m => m.MemberID, a => a.MemberID, (m, a) => new { m, a })
.GroupBy(grp => grp.MemberExternalPK)
.Where(grp => grp.Count() > 1)
.Select(grp => grp.Key);
var result =
Members.Where(w => externalMembers.Contains(w.MemberExternalPK) && w.AccountStatusID == 3)
.Select(s => s.MemberExternalPK)