ObjectDataSource和LINQ技术性

时间:2011-04-25 15:58:03

标签: c# asp.net linq objectdatasource

我对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; }

如果我想使用DataListDataList DataList DataList,{{1}}等中表示此类型,最佳方法是什么? ASP.net 即可。另一个技术性问题是,儿童的数量并非一成不变。我们目前有3个深度,但很容易就有5个。

必须说我无法改变数据返回的位置和方式,因为它来自外部API。我要做的只是展示它们。

谢谢你,随时问我更多细节。我来自魁北克,通常会说法语,所以也许我英语不是很好。

修改
必须告诉我,我知道如何数据绑定DataList。我的问题是我如何将DataBind的数据主义者DataBind(并且不知道深度)包含到包含所有级别的简单维度列表中。有可能吗?

1 个答案:

答案 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:

您需要在您的类型中添加一个集合(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显示List<T>继承自ICollection&amp; ICollection<T>IList继承自ICollection;虽然IList<T>继承自ICollection<T>

MSDN也有a sample