Linq Except 操作符获取非员工和员工集合





5.00/5 (1投票)
这是我们日常工作中遇到的最常见的集合操作。它是一种基于集合的操作,使用 LINQ Except 操作符。
引言
有两个集合:一个是基于资源的集合 (ResourceBased Collection),另一个是基于员工的集合 (EmployeeBasedCollection)。基于资源的集合是超集,基于员工的集合是子集。我将使用 LINQ Except 操作符来获取非基于员工的集合 (NonEmployeeBasedCollection)。
背景
通常,我们会在数据库级别使用连接和 Except 操作符在 SQL 查询中执行基于集合的操作。如果我们在代码后台或分层架构中遇到类似的情况,并且我们手头有两个集合,并且我们不想涉及数据库,该怎么办?在这种情况下,泛型和 LINQ 就派上用场了。我尝试在下面演示这一点。
使用代码
代码不言自明。
protected void Page_Load(object sender, EventArgs e)
{
IList<ResourceBase> li=GetJoinAAndB();
foreach (ResourceBase Ui in li)
Response.Write(Ui.ID);
private IList<ResourceBase> GetJoinAAndB()
{
List<ResourceBase> resourceBaseSet = new List<ResourceBase>();
resourceBaseSet.Add(
new ResourceBase(1,"santosh","sanAddress"));
resourceBaseSet.Add(
new ResourceBase(2, "santosh", "sanAddress"));
resourceBaseSet.Add(
new ResourceBase(3, "santosh", "sanAddress"));
List<ResourceBase> employeeBasedSet = new List<ResourceBase>();
employeeBasedSet.Add(
new ResourceBase(1, "santosh", "sanAddress"));
employeeBasedSet.Add(
new ResourceBase(4, "santosh", "sanAddress"));
employeeBasedSet.Add(
new ResourceBase(5, "santosh", "sanAddress"));
var query=( from a in resourceBaseSet
select a ).Except
from b in employeeBasedSet
from a1 in resourceBaseSet
where b.ID == a1.ID
select a1 );
return query.ToList();
}
public class ResourceBase
{
public ResourceBase(int id, string name, string address)
{
ID = id;
Name = name;
Address = address;
}
public int ID { get; set; }
public String Name { get; set; }
public String Address { get; set; }
}