我对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; }
如果我想使用在DataList
(DataList
DataList
DataList
,{{1}}等中表示此类型,最佳方法是什么? ASP.net 即可。另一个技术性问题是,儿童的数量并非一成不变。我们目前有3个深度,但很容易就有5个。
必须说我无法改变数据返回的位置和方式,因为它来自外部API。我要做的只是展示它们。
谢谢你,随时问我更多细节。我来自魁北克,通常会说法语,所以也许我英语不是很好。
修改
必须告诉我,我知道如何数据绑定DataList。我的问题是我如何将DataBind的数据主义者DataBind(并且不知道深度)包含到包含所有级别的简单维度列表中。有可能吗?
答案 0 :(得分:2)
为后人的缘故...
List<Category> categories
应该没问题。属性通过以下方式暴露:
categories[0].TempID
您可以针对集合运行LINQ:
var catIDs = from cat in categories
where cat.ID.HasValue == true
select cat;
UPDATE_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();
的方式工作UPDATE_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显示List<T>
继承自ICollection
&amp; ICollection<T>
。 IList
继承自ICollection
;虽然IList<T>
继承自ICollection<T>
。
MSDN也有a sample。