使用 linq 从另一个列表中筛选相同类型的项
本文关键字:同类型 筛选 linq 另一个 列表 使用 | 更新日期: 2023-09-27 18:30:19
这是我的类,
public class App
{
public string Appname;
public string Appcode;
}
我有一个应用程序列表,例如
List<App> apps;
同一对象的另一个列表,例如
List<App> filteredapps;
现在我需要从第一个列表中过滤,该列表与第二个列表中的应用程序名称相同。我怎样才能实现这一点
你需要使用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()
。