使用 linq 从另一个列表中筛选相同类型的项

本文关键字:同类型 筛选 linq 另一个 列表 使用 | 更新日期: 2023-09-27 18:30:19

这是我的类,

public class App
{
   public string Appname;
   public string Appcode;
}

我有一个应用程序列表,例如

List<App> apps;

同一对象的另一个列表,例如

List<App> filteredapps;

现在我需要从第一个列表中过滤,该列表与第二个列表中的应用程序名称相同。我怎样才能实现这一点

使用 linq 从另一个列表中筛选相同类型的项

你需要使用Enumerable.Intersect Method :http://msdn.microsoft.com/en-us/library/system.linq.enumerable.intersect.aspx

void Main()
{
    List<App> apps;
    List<App> filteredapps;
    var query=apps.Intersect(filteredapps,new AppComparer());

}
public class App
{
   public string Appname;
   public string Appcode;
}
class AppComparer : IEqualityComparer<App>
{
    public bool Equals(App x, App y)
    {
    if (Object.ReferenceEquals(x, y)) return true;

    if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
        return false;

    return x.Appname == y.Appname && x.Appcode == y.Appcode;
}
// If Equals() returns true for a pair of objects  
// then GetHashCode() must return the same value for these objects. 
public int GetHashCode(App product)
{
    //Check whether the object is null 
    if (Object.ReferenceEquals(App, null)) return 0;
    //Get hash code for the Name field if it is not null. 
    int hashProductName = product.Appname == null ? 0 : product.Appname.GetHashCode();
    //Get hash code for the Code field. 
    int hashProductCode = product.Appcode.GetHashCode();
    //Calculate the hash code for the product. 
    return hashProductName ^ hashProductCode;
}
}
apps.where(a=>filteredApps.Select(fa=>fa.AppName).Contains(a.AppName))

var filteredNames = filteredApps.Select(fa=>fa.AppName);
apps.where(a=>filteredNames.Contains(a.AppName))
var query = apps.Where(x=>filteredapps.Any(y=>y.AppName == x.AppName));

如果需要List而不是IEnumerable,请在查询末尾添加.ToList()