当List <int>?</int>中存在另一个属性时,如何从属性获取整数列表

时间:2014-11-25 16:04:47

标签: c# asp.net linq

尝试获取List<int>的返回值,其中一个变量是一个类,属性为IDParentID,另一个变量为List<int>,其中包含所有父ID在那里。我想从类变量中返回List<int>变量中存在ParentID的所有ID。

例如:

_SubCategories =具有2个属性的类:ParentIDID(两种类型Int32)
_ParentCategoryIDs = List<int>,其中包含所有父ID的完整列表。

我需要遍历_ParentCategoryIDs中存在的所有_SubCategories.ParentID,并从ParentID获取每个_SubCategories的所有ID,并将其填入List<int>

我正在努力解决这个问题,基本上,我想把它转换为由管道字符分隔的字符串,如下所示:

string.Join("|", _SubCategories.ConvertAll<int>(v => v.ParentID)
                               .Intersect(_ParentCategoryIDs).Distinct());

因此,需要输出ParentID位于_ParentCategoryIDs的_SubCategories中的所有ID。试图让这个工作起来感觉有点愚蠢...

我觉得我需要SelectManyWhere在这里......对此有任何帮助都非常感谢。

3 个答案:

答案 0 :(得分:3)

听起来相当简单,除非我误解了这个问题

var matched = _SubCategories.Where(sc => _ParentCategoryIDs.Contains(sc.ParentID))
                      .Select(sc => sc.ID)
                      .ToList();

然后你可以用管道加入:

var result = String.Join("|",matched);

答案 1 :(得分:0)

我不确定这是不是你的意思(但试试这个): -

 List<int> result = categories.Where(x => x.ParenttIds.Contains(x.subCats.ParentID))
                              .Select(x => x.subCats.ID).ToList();

我使用了以下输入并输入: -

List<Category> categories = new List<Category>
           {
               new Category { subCats = new _SubCategories { ID =1, ParentID = 4}, ParenttIds = new List<int> { 2,4,7}},
               new Category { subCats = new _SubCategories { ID =2, ParentID = 2}, ParenttIds = new List<int> { 4,3,8}},
               new Category { subCats = new _SubCategories { ID =3, ParentID = 8}, ParenttIds = new List<int> { 2,8,4}}
           };

public class Category
    {
        public _SubCategories subCats { get; set; }
        public List<int> ParenttIds { get; set; }
    }

    public class _SubCategories
    {
        public int ID { get; set; }
        public int ParentID  { get; set; }
    }

答案 2 :(得分:0)

使用lambda表达式:

int id = 1; //ID of parent (Category)
List<SubCategory> results =  _SubCategories.FindAll(x => x.ParentId == id); //returns all subcat with parent id = 1