ObjectDataSource和LINQ技术性



我对LINQ有一个小问题。

我收集了一些类别(大约100个(。他们中的一些人是另一类人的孩子。这是这种类型的IList

 public Guid TempID { get; set; }
 public Nullable<int> ID { get; set; }
 public bool Published { get; set; }
 public int CategoryLevel { get; set; }
 public int CategoryOrder { get; set; }
 public DateTime UpdatedDate { get; set; }
 public Nullable<int> RefParent { get; set; }
 public bool GotChildren { get; set; }

如果我想使用ASP.netDataList(可能是DataListDataListDataList等(中表示这种类型,最好的方法是什么。另一个技术问题是子级的数量不是静态的。我们目前有3个深度,但有时可能有5个。

必须说的是,我不能改变数据返回的位置和方式,因为这是数据从外部API返回的方式。我要做的只是向他们展示。

谢谢,请随时向我询问更多细节。我来自魁北克,通常说法语,所以我的英语可能不是很好。

编辑
必须说明我知道如何对DataList进行数据绑定。我的问题是如何将数据列表的数据列表(不知道深度(绑定到包含所有级别的简单维度列表。有可能吗?

为了子孙后代
List<Category> categories应该没问题。属性通过以下方式暴露:

categories[0].TempID

您可以针对以下集合运行LINQ:

var catIDs = from cat in categories
             where cat.ID.HasValue == true
             select cat;

更新_3:

好吧,我现在明白了——你收到一个看起来像的物体

 public Guid TempID { get; set; }
 public Nullable<int> ID { get; set; }
 public bool Published { get; set; }
 public int CategoryLevel { get; set; }
 public int CategoryOrder { get; set; }
 public DateTime UpdatedDate { get; set; }
 public Nullable<int> RefParent { get; set; }
 public bool GotChildren { get; set; }

并且您需要能够添加子类别的集合?

如果你不能继承这个类,我会使用这个对象:

class MyCategory
{
    // add fields for respective Category properties
    // or just the following
    Category category;
    List<Category> subCategories;
    MyCategory (Category category)
    {
        this.category = category;
        if (this.category.GotChildren)
        {
            // query TempIDs, Level, etc. from collection of Categories
            // and assign to subCategories collection
        }
    }
    // add property getters/setters as needed
    public List<Category> SubCategories
    { get { return subCategories; } }
}

外部,调用:

bool TryGetSubCategories (MyCategory myCategory, out DataList myDataList)
{
    if (myCategory.GotChildren)
    {myDataList.DataSource = myCategory.SubCategories;}
    return myCategory.GotChildren;
}  

更新了该方法,使其工作方式与Dictionary.TryGetValue((类似;

更新_2:

您需要将集合(ICollectionList<T>等(属性添加到您的类型:

 public Guid TempID { get; set; }
 public Nullable<int> ID { get; set; }
 public bool Published { get; set; }
 public int CategoryLevel { get; set; }
 public int CategoryOrder { get; set; }
 public DateTime UpdatedDate { get; set; }
 public Nullable<int> RefParent { get; set; }
 public bool GotChildren { get; set; }
 public List<Categories> SubCategories {get; set;} // add this

这将增加无限的深度。我不明白为什么不能使用DataList作为您的SubItems数据类型。

更新:

仔细查看DataList类之后,必须使用ICollection作为DataSource。MSDN显示CCD_ 10继承自CCD_ 11&ICollection<T>。CCD_ 13继承自CCD_;而CCD_ 15继承自CCD_。

MSDN还有一个示例。

相关内容

  • 没有找到相关文章

最新更新