C# 如何返回EntityCollection类型的对象以与ASP.NET MVC中的SelectList一起使用?

C# 如何返回EntityCollection类型的对象以与ASP.NET MVC中的SelectList一起使用?,c#,asp.net-mvc,entity-framework,html-helper,enumeration,C#,Asp.net Mvc,Entity Framework,Html Helper,Enumeration,我对ASP.NET MVCHtmlHelper中的DropDownList进行了扩展,使其能够呈现optgroup。当第二个集合是IList时,它工作“正常”,但我很快发现,如果它不是,或者在我的情况下,如果它是EntityCollection,它会崩溃,因为SelectList无法枚举它 所以,我在这里向任何知道如何绕过这个问题的人寻求帮助。我想传入第二个集合的类型,然后在内部执行强制转换,但这感觉不对 无论如何,我希望有人能帮助我,以下是当前的代码: internal IList<Gr

我对ASP.NET MVC
HtmlHelper
中的
DropDownList
进行了扩展,使其能够呈现
optgroup
。当第二个集合是
IList
时,它工作“正常”,但我很快发现,如果它不是,或者在我的情况下,如果它是
EntityCollection
,它会崩溃,因为
SelectList
无法枚举它

所以,我在这里向任何知道如何绕过这个问题的人寻求帮助。我想传入第二个集合的
类型,然后在内部执行强制转换,但这感觉不对

无论如何,我希望有人能帮助我,以下是当前的代码:

internal IList<GroupListItem> GetListItems() {
    return (from object Item in Items
            select new GroupListItem {
                Children = new SelectList((Eval(Item, this.ChildrenField) as IEnumerable), this.ChildDataValueField, this.ChildDataTextField, this.ChildSelectedValue),
                Label = (Eval(Item, this.LabelField) as string)
            }).ToList();
}

private static object Eval(
    object Container,
    string Expression) {
    object Value = Container;

    if (!String.IsNullOrEmpty(Expression)) {
        Value = DataBinder.Eval(Container, Expression);
    };

    if (Value is IList) {
        return Value;
    };

    return Convert.ToString(Value, CultureInfo.CurrentCulture);
}
内部IList GetListItems(){
返回(从项目中的对象项目)
选择新建GroupListItem{
Children=新的SelectList((Eval(Item,this.ChildrenField)为IEnumerable)、this.ChildDataValueField、this.ChildDataTextField、this.ChildSelectedValue),
Label=(Eval(Item,this.LabelField)作为字符串)
}).ToList();
}
私有静态对象评估(
对象容器,
字符串表达式){
对象值=容器;
如果(!String.IsNullOrEmpty(表达式)){
Value=DataBinder.Eval(容器、表达式);
};
if(值为IList){
返回值;
};
返回Convert.ToString(值,CultureInfo.CurrentCulture);
}

您考虑过使用IEnumerable而不是IList吗?

我考虑过,但问题是在这种情况下,传入的任何对象都实现了IEnumerable,因此它们将始终命中该条件并返回。非集合对象(如本例中的标签)永远不会正确返回,并且会在代码的其他地方导致问题。