简体   繁体   English

具有linq和多项选择的列表框

[英]Listbox with linq and multiple selection

Got 2 listboxes: Patients and Sessions. 有2个列表框:患者和会话。 Need to display filtered (with linq query) info in the second one, based on multiple selection in the first one. 根据第一个选择中的多项选择,需要在第二个中显示过滤后的信息(使用linq查询)。

Commented string works but allows only one item to be selected in the first listbox. 带注释的字符串有效,但只允许在第一个列表框中选择一个项目。

I definitely know that it successfully gathers Patients to List variable but when I use Contains the second listbox is empty. 我绝对知道它成功收集了Patients to List变量,但是当我使用Contains时,第二个列表框为空。

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    DataClasses1DataContext dbContext = new DataClasses1DataContext();
    List<string> selectedItems = (from object o in listBox1.SelectedItems select listBox1.GetItemText(o)).ToList();
    listBox2.DataSource = dbContext.Sessions
    //.Where(pID => pID.PatientID == listBox1.GetItemText(listBox1.SelectedValue))
      .Where(pID => selectedItems.Contains(pID.PatientID));
    listBox2.DisplayMember = "Start";
    listBox2.ValueMember = "SessionID";
}

Session and dbContext class definitions: 会话和dbContext类的定义:

public partial class Session : INotifyPropertyChanging, INotifyPropertyChanged
    {
    ...
    public int SessionID
        {
        ...
        }
    public string PatientID
        {
        ...
        }
    }

public partial class DataClasses1DataContext : System.Data.Linq.DataContext
    {
    ...
    public System.Data.Linq.Table<Session> Sessions
        {
        ...
        }
    }

I dont know what type of element you are having in your listbox1. 我不知道您的listbox1中具有哪种类型的元素。 I assumed the type is named Session : 我假设类型名为Session

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        DataClasses1DataContext dbContext = new DataClasses1DataContext();
        List<string> selectedItems = (from object o in listBox1.SelectedItems select listBox1.GetItemText(o)).ToList();
        listBox2.DataSource = dbContext.Sessions
            .Where(pID => listBox1.SelectedItems.OfType<Session>().Select(x => x.PatientID).Contains(pID.PatientID));
        listBox2.DisplayMember = "Start";
        listBox2.ValueMember = "SessionID";
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM