我检索了150条记录的特定类列表。 现在,我只想要那些具有Licenseid的记录,这些记录在我的另一个int List中。
例如My MainList
List<CustomerDocument> _list = GetListByID(CustomerID);
在此列表中,我有列LicenseID,CustomerID,CustomerName,Type,Age e.t.c
和SecontList
List<int> type = new List<int>();
在Int列表中,我动态地逐个添加LicenseID。
Public class CustomerDocument
{
public int LicenseID{get;set;};
public int CustomerID{get;set;};
public string CustomerName{get;set;};
public int Age{get;set;};
}
这是我正在获取列表的CustomerDocument类。
现在假设,如果Int列表有三条记录,那么我希望我的主列表中的那些记录在我的Int列表中使用Linq具有这三个LicenseID。
_list = ???
List<CustomerDocument> list = new List<CustomerDocument>();
List<Int> types = new List<Int>();
MapSearchSalesEntities datacontext = new MapSearchSalesEntities();
var collection = ddlLicenseType.CheckedItems;
if (collection.Count > 0)
{
foreach (var item in collection)
{
int value = Convert.ToInt32(item.Value);
types .Add(value);
}
}
var query = (from t1 in datacontext.Licenses
select new CustomerDocument
{
LicenseID = t1.LicenseID,
CustomerID = t1.CustomerID,
CustomerName= t1.CustomerName,
Age= t1.Age,
});
list = query.ToList(); ---gives 150 Records
if (types != null && types.Count > 0)
{
list = list.Where(c => types.Contains(c.LicenseID)).ToList(); --- Gives 0 Records
}
答案 0 :(得分:3)
最有效的方法是使用Enumerable.Join
:
var documents = from doc in _list
join licenseID in type
on doc.LicenseID equals licenseID
select doc;
如果要替换列表:
_list = documents.ToList();
你也可以使用Enumerable.Where
+ List.Contains
,但效率不高但更短:
_list = _list.Where(d => type.Contains(d.LicenseID)).ToList();
答案 1 :(得分:0)
这是一个linq查询
var result = (from cust in _list join id in type on cust.LicenseID equals id select cust).ToArray();
答案 2 :(得分:0)
使用LinQ Where
方法,这非常简单:
_list = _list.Where(c => type.Contains(c.LicenseID)).ToList();