我对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.net在DataList
(可能是DataList
的DataList
、DataList
等(中表示这种类型,最好的方法是什么。另一个技术问题是子级的数量不是静态的。我们目前有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:
您需要将集合(ICollection
、List<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还有一个示例。