Linq 到数据集
Linq to DataSet
我想接所有不是部门老板的卖家。
我该怎么做?在下面的这个查询中,只挑选了作为部门老板的卖家,我想要相反的。
我的查询:
var query = db.Sellers
.Join(db.Departments,
s => s.Id,
d => d.BossId,
(s, d) => new { Seller = s, Department = d })
.Where(a => a.Seller.Id == a.Department.BossId) ????
.Select(x => x.Seller).ToList();
在"Where"部分,我尝试了a => a.Seller.Id != a.Department.BossId
,但我有3个不是老板的卖家。
我也试过这种方式:
var listNonBoss = (from s in db.Sellers
join d in db.Departments on s.Id equals d.BossId
select s.Id).ToList();
我想要这些查询的反面。
Join
在您的代码中将执行内部联接,这意味着它将过滤掉没有老板的卖家。
相反,你可以做一个外部连接,然后删除那些有老板的人。在流利的 LINQ 中,外部连接是通过执行 GroupJoin
然后 SelectMany
.
来完成的
像这样:
var query = db.Sellers
.GroupJoin(db.Departments, s => s.Id, d => d.BossId, (s, d) => new { Seller = s, Department = d })
.SelectMany(x => x.d.DefaultIfEmpty(), (seller, department) => new { s.seller, department})
.Where(a => a.department.BossId == null)
.Select(x => x.Seller).ToList();
或者,使用查询语法:
var listNonBoss = (from s in db.Sellers
join d in db.Departments on s.Id equals d.BossId into joinedTable
from jt in joinedTable.DefaultIfEmpty()
where jt.BossId == null
select s.Id).ToList();
有时将其分成多个步骤会更容易。
首先获取所有boss ID的集合:
var bossIDs = db.Departments.Select(x => x.BossId);
然后获取该集合中所有 ID 为 not 的卖家:
var listNonBoss = db.Sellers.Where(x => !bossIDs.Contains(x.Id)).ToList();
我想接所有不是部门老板的卖家。
我该怎么做?在下面的这个查询中,只挑选了作为部门老板的卖家,我想要相反的。
我的查询:
var query = db.Sellers
.Join(db.Departments,
s => s.Id,
d => d.BossId,
(s, d) => new { Seller = s, Department = d })
.Where(a => a.Seller.Id == a.Department.BossId) ????
.Select(x => x.Seller).ToList();
在"Where"部分,我尝试了a => a.Seller.Id != a.Department.BossId
,但我有3个不是老板的卖家。
我也试过这种方式:
var listNonBoss = (from s in db.Sellers
join d in db.Departments on s.Id equals d.BossId
select s.Id).ToList();
我想要这些查询的反面。
Join
在您的代码中将执行内部联接,这意味着它将过滤掉没有老板的卖家。
相反,你可以做一个外部连接,然后删除那些有老板的人。在流利的 LINQ 中,外部连接是通过执行 GroupJoin
然后 SelectMany
.
像这样:
var query = db.Sellers
.GroupJoin(db.Departments, s => s.Id, d => d.BossId, (s, d) => new { Seller = s, Department = d })
.SelectMany(x => x.d.DefaultIfEmpty(), (seller, department) => new { s.seller, department})
.Where(a => a.department.BossId == null)
.Select(x => x.Seller).ToList();
或者,使用查询语法:
var listNonBoss = (from s in db.Sellers
join d in db.Departments on s.Id equals d.BossId into joinedTable
from jt in joinedTable.DefaultIfEmpty()
where jt.BossId == null
select s.Id).ToList();
有时将其分成多个步骤会更容易。
首先获取所有boss ID的集合:
var bossIDs = db.Departments.Select(x => x.BossId);
然后获取该集合中所有 ID 为 not 的卖家:
var listNonBoss = db.Sellers.Where(x => !bossIDs.Contains(x.Id)).ToList();