使用列表框 SelectedItems 作为 LINQ 参数
Use listbox SelectedItems as LINQ argument
我有一个包含 class 个条目的列表:
public class Package
{
private readonly string _packageID = string.Empty;
private readonly string _packageStatus= string.Empty;
public Package(string package_ID, string package_status)
{
_packageID = package_ID;
_packageStatus= package_status;
}
public string PackageID
{
get
{
return _packageID;
}
}
public string PackageStatus
{
get
{
return _packageStatus;
}
}
}
基于此class我用数据填充了一个列表:
List<Package> PackageList = new List<Package>();
PackageList.Add(new Package(0, "New");
PackageList.Add(new Package(1, "Processed");
PackageList.Add(new Package(2, "Processed");
PackageList.Add(new Package(3, "New");
PackageList.Add(new Package(4, "Sent");
PackageList.Add(new Package(4, "Received");
此数据显示在数据网格视图中:
dataGridView1.DataSource = PackageList
各种包状态显示在列表框中:
listBox1.DataSource = PackageList.Select(p => p.PackageStatus).Distinct().ToList();
使用此列表框,用户可以 select 多个状态并使用数据网格视图中的包更新列表。
我想使用 LINQ 根据列表框中的 selected 状态从 PackageList 中检索所有包。我试过很多东西但直到现在都没有成功....
SubPackageList = PackageList.Where(o => o.PackageStatus == Listbox1.SelectedItems);
非常感谢任何关于如何解决这个问题的支持。
如果我没理解错的话,你会得到一个包列表和一个条件列表,你需要匹配的元素。
List<Package> PackageList = new List<Package>();
PackageList.Add(new Package(0, "New"));
PackageList.Add(new Package(1, "Processed"));
PackageList.Add(new Package(2, "Processed"));
PackageList.Add(new Package(3, "New"));
PackageList.Add(new Package(4, "Sent"));
PackageList.Add(new Package(4, "Received"));
List<string> Conditions = new List<string>() { "New", "Processed"};
var SubList = PackageList.Where(x => Conditions.Contains(x.PackageStatus)).ToList();
foreach (var item in SubList)
{
Console.WriteLine($"ID:{item.PackageID} Status:{item.PackageStatus}");
}
Returns:
ID:0 Status:New
ID:1 Status:Processed
ID:2 Status:Processed
ID:3 Status:New
可以查一下here
我有一个包含 class 个条目的列表:
public class Package
{
private readonly string _packageID = string.Empty;
private readonly string _packageStatus= string.Empty;
public Package(string package_ID, string package_status)
{
_packageID = package_ID;
_packageStatus= package_status;
}
public string PackageID
{
get
{
return _packageID;
}
}
public string PackageStatus
{
get
{
return _packageStatus;
}
}
}
基于此class我用数据填充了一个列表:
List<Package> PackageList = new List<Package>();
PackageList.Add(new Package(0, "New");
PackageList.Add(new Package(1, "Processed");
PackageList.Add(new Package(2, "Processed");
PackageList.Add(new Package(3, "New");
PackageList.Add(new Package(4, "Sent");
PackageList.Add(new Package(4, "Received");
此数据显示在数据网格视图中:
dataGridView1.DataSource = PackageList
各种包状态显示在列表框中:
listBox1.DataSource = PackageList.Select(p => p.PackageStatus).Distinct().ToList();
使用此列表框,用户可以 select 多个状态并使用数据网格视图中的包更新列表。
我想使用 LINQ 根据列表框中的 selected 状态从 PackageList 中检索所有包。我试过很多东西但直到现在都没有成功....
SubPackageList = PackageList.Where(o => o.PackageStatus == Listbox1.SelectedItems);
非常感谢任何关于如何解决这个问题的支持。
如果我没理解错的话,你会得到一个包列表和一个条件列表,你需要匹配的元素。
List<Package> PackageList = new List<Package>();
PackageList.Add(new Package(0, "New"));
PackageList.Add(new Package(1, "Processed"));
PackageList.Add(new Package(2, "Processed"));
PackageList.Add(new Package(3, "New"));
PackageList.Add(new Package(4, "Sent"));
PackageList.Add(new Package(4, "Received"));
List<string> Conditions = new List<string>() { "New", "Processed"};
var SubList = PackageList.Where(x => Conditions.Contains(x.PackageStatus)).ToList();
foreach (var item in SubList)
{
Console.WriteLine($"ID:{item.PackageID} Status:{item.PackageStatus}");
}
Returns:
ID:0 Status:New
ID:1 Status:Processed
ID:2 Status:Processed
ID:3 Status:New
可以查一下here