C#Unity下拉列表,更改调用函数,函数查询列表返回匹配列表项

时间:2017-04-12 13:46:27

标签: c# list linq unity3d uielement

其中一个简单的问题,我的头被堵住了。我以前习惯用php和mysql编码,我只是无法弄清楚c#中的简单语法。

我有一个列表,其中包含商家列表,因为我的Item类的结构如下。我有一个统一的下拉列表和onchange我有这个选定项目的类别ID:

private void myDropdownValueChangedHandler(Dropdown target) {

int selectedIndex = myDropdown.value;

    //LOAD THE ID FROM THE CATS LIST
    string theName = myDropdown.options[selectedIndex].text;
    var result = loadJSONCats.instance.fetchItemIDByName(theName);

}


public Item fetchItemByID(int id){

        for (int i = 0; i < myList.Count; i++) {
            if(myList[i].ID == id){
               return myList[i];
            }

        }
        return null;
 }

我现在需要在mylist中查找匹配的列表。

在mysql中我会从mylist中选择SELECT * id(id);

我需要从结果中创建一个新列表,这样我就可以遍历找到的项目并实例化一个预制件,它将位于垂直列表元素中,每个垂直行中都有正确的数据。

我的项目类

public class Item {

    public int ID {get; set;}
    public string post_modified {get; set;}
    public string post_title {get; set;}
    public string post_type {get; set;}
    public string guid {get; set;}
    public string Terms_IDs {get; set;}
    public string City {get; set;}
    public string Latitude {get; set;}
    public string LogoID {get; set;}
    public string Longitude {get; set;}

    //public Item(int id, string post_mod, string post_title, string post_type, string terms, string meta, string guid){
    public Item(int id, string post_mod, string post_title, string post_type, string guid, string terms, string city, string latitude, string logoID, string longitude){

        this.ID = id;
        this.post_modified = post_mod;
        this.post_title = post_title;
        this.post_type = post_type;
        this.guid = guid;
        this.Terms_IDs = terms;
        this.City = city;
        this.Latitude = latitude;
        this.LogoID = logoID;
        this.Longitude = longitude;

    }

}

术语ID是一个字符串,因为我的json代码更容易翻译。

这是我坚持的功能,

public Item findItemsByIDs(int termID){



}

我需要传入item.terms的id并找到所有匹配的列表项:

    public List<Item> myList = new List<Item>();

然后返回一个包含正确数据的列表,并调用预制实例化以填充垂直网格,其中行由查询中的结果填充。

我是LINQ的新手,并且对它和lamba感到困惑。

这只是其中一件事,我很容易在sql中轻易做到这一点,但对于c#im来说,它是全新的,并且无处可去。

帮助感谢。

这是构造函数:

void ConstructListingDatabase(){

        for (int i = 1; i < itemData.Count; i++) {
            myList.Add(new Item((int)itemData[i][0], itemData[i][1].ToString(), itemData[i][2].ToString(), itemData[i][3].ToString(), itemData[i][4].ToString(), itemData[i][5].ToString(), itemData[i][6].ToString(), itemData[i][7].ToString(), itemData[i][8].ToString(), itemData[i][9].ToString()));
        }

  }

2 个答案:

答案 0 :(得分:2)

通过使用Linq,您可以获得包含相同Id的项目

public List<Item> findItemsByIDs(int termID){

    return myList.Where(i => i.Terms_IDs.Split(',').Contains(termID.ToString())).ToList();

}

这会返回列表中包含Items

Terms_IDs的所有termID

不要忘记添加

using System.Linq;

答案 1 :(得分:1)

这就是你需要的:

myList.Select(i => i).Where(i => int.Parse(i.Terms_IDs) == termID).ToList();

然后返回列表,您需要将方法签名更改为:

public List<Item> findItemsByIDs(int termID){
    return  myList.Select(i => i).Where(i => int.Parse(i.Terms_IDs) == termID).ToList();
}