Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查询列表中存在多个同名元素的位置_C#_Linq_List - Fatal编程技术网

C# 查询列表中存在多个同名元素的位置

C# 查询列表中存在多个同名元素的位置,c#,linq,list,C#,Linq,List,Windows窗体应用程序 好吧对不起我有课 public class comm { private int dayV; private string timeV; private decimal priceV; private string nameValue; private string descriptionV; public comm(string Day, string Time, string Pri

Windows窗体应用程序

好吧对不起我有课

public class comm
   {

      private int dayV;
      private string timeV;
      private decimal priceV;
      private string nameValue;
      private string descriptionV;

      public comm(string Day, string Time, string Price, string Name, string Description)
      {
         try
         {
            this.dayV = Convert.ToInt32(Day);
         }
         catch (Exception ex)
         {

         }

         this.timeV = Time;
         decimal PriceVal;
         var irishCulture = CultureInfo.CreateSpecificCulture("en-IE");
         if (decimal.TryParse(Price, NumberStyles.Currency, irishCulture, out PriceVal))
         {
            this.priceV = Convert.ToDecimal(PriceVal);
         }
         this.nameValue = Name;
         this.descriptionV = Description;
      }


      public int GetDay() { return dayV; }
      public string GetTime() { return timeV; }
      public string GetPrice() { return (Convert.ToString(priceV)); }
      public string GetName() { return nameValue; }

      // Returns full event Description
      public string Description()
      {
         string price = "Price: ";
         return timeV + "\r\n" + price + "€" + priceV + "\r\n" + this.descriptionV;
      }
   }
我将文本文件读入一个列表,并将每个字段分配到相应的类实例变量中

文本文件如下所示

1,02:29 pm,€55.00,John D,Main st 
1,05:43 pm,€70.00,John D,Bridge st
2,01:43 pm,€100.00,Mike O,First Floor A12
1,10:44 am,€100.00,Colm Collins,First Floor A13
2,11:44 am,€110.00,Martin O, Exp 01
读取文件的方法

    public List<communityEvent> CreateList()
          {
             List<comm> entries = new List<comm>();
             try
             {
                StreamReader fileIn = new StreamReader(path);
                //Read the file
                while (!fileIn.EndOfStream)
                {
                   String line = fileIn.ReadLine();
                   String[] pieces = line.Split(',');
                   if (pieces.Length == 5)
                   {
                      comm Eve = new comm(pieces[0], pieces[1], pieces[2], pieces[3], pieces[4]);
                      entries.Add(Eve);
                   }
        return entries;
我想要的是,每次用户选择不同的名称时。 我得到了相应的description(),例如,选中的第一个John D将用description()填充description文本框,这应该是该行中的字段。
我遇到的问题是,有些人的名字是相同的。无论我选择哪一个名字,描述只会为所有名字相同的人返回第一个描述()。这仍然很模糊——我不知道“个人描述”是什么意思,因为你写了,你的新数据示例表明,数据中可能有多个匹配项。当您选择与多个名称匹配的名称时,不存在“单个描述”

也就是说,如果您只需要一个描述,那么您真正想要的似乎是将组合框中的单个项与填充组合框的数据中的单个项关联起来

不幸的是,您仍然没有按照要求提供完整的代码示例。因此,无法知道如何填充
组合框
,甚至无法知道如何声明
各种
变量。但是你说数据是“被读取到列表中”的,所以让我们假设:

  • 您有一些类型
    DataRow
    ,表示文件中的一行文本
  • 各种
    被声明为一个
    列表
  • 组合框中项目的顺序
    各种
    列表中项目的顺序完全相同
如果以上都是真的(并且没有完整的代码示例,任何阅读您的问题的人都不可能确定它是真的),那么您根本不需要或不想查询数据。您已经知道所选项目的确切索引

让我们进一步假设:

  • ComboBox
    的名称是“comboBox1”,代码中有一个名为
    comboBox1
    的字段,该字段引用该
    ComboBox
    实例
在这种情况下,以下代码应足以替代您提供的整个代码示例:

descriptionTextBox.Text = various[comboBox1.SelectedIndex].Description();
这将检索组合框中当前选择的索引,然后使用该索引(因为组合框中的数据顺序应与列表中的数据顺序完全相同)从列表中检索数据行值,以便调用
描述()
方法获取该行数据的实际描述,并将其分配给
descriptionTextBox
Text
属性

如果您的
组合框
有不同的名称,只需使用正确的名称,而不是上面的
组合框1

同样,如果这不能解决您的问题,请在问题中添加详细信息。提供一个最小的、完整的代码示例,并准确解释它的作用以及它与您希望发生的不同之处。

试试这个

descriptionTextBox.Text = various[comboBox.SelectedIndex].Description();

谢谢大家的帮助,以下是对我有用的 我创建了一个方法,并将组合框文本和索引输入其中

    private void ExtractData(string eventComboBo, int index)
  {

     var query = from v in various
                 where eventComboBo == v.GetName() && eventComboBox.SelectedIndex.Equals(index)
                 select v.Description();

     foreach (var ev in query)
     {
        descriptionTextBox.Text = ev;
     }

您的问题相当模糊。如果它是WPF应用程序,您应该将组合框的
SelectedItem
属性绑定到视图模型中的
SelectedItem
属性,然后将
descriptionTextBox.Text
绑定到SelectedItem的描述。谢谢,不,每次组合框选择更改时,我都会尝试获取单独的描述。对不起,我的问题问得很糟糕written@Tom:您的问题仍应包含完整的代码示例。但是,请参阅上面的修订答案,以防它解决您的问题。请您编辑一个解释,解释为什么该代码回答了这个问题?不鼓励只使用代码的答案,因为他们更难让人们了解问题背后的原因。对不起,我明白了。错误1“字符串”不包含“SelectedIndex”的定义,并且没有扩展方法“SelectedIndex”接受第一个参数
descriptionTextBox.Text = various[comboBox.SelectedIndex].Description();
    private void ExtractData(string eventComboBo, int index)
  {

     var query = from v in various
                 where eventComboBo == v.GetName() && eventComboBox.SelectedIndex.Equals(index)
                 select v.Description();

     foreach (var ev in query)
     {
        descriptionTextBox.Text = ev;
     }