linq to sql 中的嵌套 IN 子查询
nested IN subquery in linq to sql
困惑如何将此 sql 查询写入 linq to sql
select FirstName from [User] where [UserId] in(
select LenderId from AffiliateLenderRelation where AffiliateId in (select Userid From [User] where [UserId] = 11)
)
到目前为止我尝试了什么
var innerquery = from iq in db.AffiliateLenderRelations where iq.AffiliateId == loggedInUser.UserId select iq.AffiliateId;
List<SelectListItem> lenders = db.Users
.Where(o => o.AccountTypeId == 1 && o.Deleted == false && innerquery.Contains(o.UserId))
.Select(o => new SelectListItem()
{
Value = o.UserId.ToString(),
Text = o.FirstName
}).ToList();
lenders.Insert(0, new SelectListItem() { Value = "0", Text = "All" });
我认为不需要嵌套查询。您可以使用连接查询。试试这个
var lobj= (from u db.Users.where(x=>x.UserId==11)
let ces = from ce in db.AffiliateLenderRelation.where( y=> y.AccountTypeId == 1 && y.Deleted == false )
select ce.LenderId
where ces.Contains(u.UserID)
.Select(o => new SelectListItem()
{
Value = o.UserId.ToString(),
Text = o.FirstName
})).ToList();
你的代码一切正常,我猜只有一个错误。
change select iq.AffiliateId to => iq.LenderId
var innerquery = from iq in db.AffiliateLenderRelations where iq.AffiliateId == loggedInUser.UserId select iq.AffiliateId;
List<SelectListItem> lenders = db.Users
.Where(o => o.AccountTypeId == 1 && o.Deleted == false && innerquery.Contains(o.UserId))
.Select(o => new SelectListItem()
{
Value = o.UserId.ToString(),
Text = o.FirstName
}).ToList();
lenders.Insert(0, new SelectListItem() { Value = "0", Text = "All" });
困惑如何将此 sql 查询写入 linq to sql
select FirstName from [User] where [UserId] in(
select LenderId from AffiliateLenderRelation where AffiliateId in (select Userid From [User] where [UserId] = 11)
)
到目前为止我尝试了什么
var innerquery = from iq in db.AffiliateLenderRelations where iq.AffiliateId == loggedInUser.UserId select iq.AffiliateId;
List<SelectListItem> lenders = db.Users
.Where(o => o.AccountTypeId == 1 && o.Deleted == false && innerquery.Contains(o.UserId))
.Select(o => new SelectListItem()
{
Value = o.UserId.ToString(),
Text = o.FirstName
}).ToList();
lenders.Insert(0, new SelectListItem() { Value = "0", Text = "All" });
我认为不需要嵌套查询。您可以使用连接查询。试试这个
var lobj= (from u db.Users.where(x=>x.UserId==11)
let ces = from ce in db.AffiliateLenderRelation.where( y=> y.AccountTypeId == 1 && y.Deleted == false )
select ce.LenderId
where ces.Contains(u.UserID)
.Select(o => new SelectListItem()
{
Value = o.UserId.ToString(),
Text = o.FirstName
})).ToList();
你的代码一切正常,我猜只有一个错误。
change select iq.AffiliateId to => iq.LenderId
var innerquery = from iq in db.AffiliateLenderRelations where iq.AffiliateId == loggedInUser.UserId select iq.AffiliateId;
List<SelectListItem> lenders = db.Users
.Where(o => o.AccountTypeId == 1 && o.Deleted == false && innerquery.Contains(o.UserId))
.Select(o => new SelectListItem()
{
Value = o.UserId.ToString(),
Text = o.FirstName
}).ToList();
lenders.Insert(0, new SelectListItem() { Value = "0", Text = "All" });