65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2012年12月17日

CPOL
viewsIcon

21913

这是我们日常工作中遇到的最常见的集合操作。它是一种基于集合的操作,使用 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; }
    }

     





   

© . All rights reserved.