搜索嵌套列表<t> </t>

时间:2012-08-28 10:15:34

标签: c# generic-list nested-generics

我有这个数据结构:

class Conference 
{
    private List<List<string>>_orgs;
    public List<List<string>> Orgs
    {
       set { _orgs = value; } get { return _orgs; }
    }
}

此系列中的数据:

List<string> sublist = new List<string>();
sublist.Add("university");
sublist.Add("organization");

List<List<string>> list = new List<List<string>>();
list.Add(sublist);

然后:

Conference c = new Conference();
c.Orgs = list;

我收集了会议对象:

List<Conference> listConferences = new List<Conference>(); 
listConferences.Add(c);

我希望搜索类似"uni"的字符串,并查找会议集合,如"uni"。我怎么能这样做?

3 个答案:

答案 0 :(得分:0)

你可以这样做:

var selection = listConferences
                .Where(x => x.Orgs.SelectMany(y => y).Any(y => y.Contains("uni")))
                .ToList();

注意:

根据您的需要,可能不需要跟踪ToList()(例如,只有在您跳过选项后才重复选择)。

答案 1 :(得分:0)

请使用以下代码; 您可以使用自己的会议列表而不是第三个。你现在可以使用类似关键字。

List<string> first = new List<string>();
            first.Add("University");
            first.Add("Standard");

            List<List<string>> second = new List<List<string>>();
            second.Add(first);

            List<List<List<string>>> third = new List<List<List<string>>>();
            third.Add(second);

            var e = third.Find(delegate(List<List<string>> r) 
                        { 
                            bool isValid = false; 
                            if(r.Count > 0)
                            { 
                                foreach(List<string> s in r)
                                { 
                                    if(s.Count > 0 ) 
                                    { 
                                        isValid = s.FindAll(delegate(string t){ return t.StartsWith("uni", StringComparison.OrdinalIgnoreCase);}).Count > 0;
                                    }
                                }
                            }
                            return isValid;
                        });

答案 2 :(得分:0)

完成,再使用linq进行一次锻炼。你应该对此感到满意:

var univ = from p in c.Orgs
                       select p.FindAll(r => r.FindAll(s => s.StartsWith("univ", StringComparison.OrdinalIgnoreCase)));