C# EF cast以查看模型树结构

C# EF cast以查看模型树结构,c#,entity-framework,viewmodel,self-referencing-table,C#,Entity Framework,Viewmodel,Self Referencing Table,我在实体框架中有一个模型,在同一个表中有父子关系。这是一个0,1到多的映射。现在它有很多属性,在一个场景中,我不需要所有这些属性,只需要Id、Name和Children public partial class Foo { public Foo() { this.As = new HashSet<A>(); this.Children = new HashSet<Foo>(); this.Bs = new H

我在实体框架中有一个模型,在同一个表中有父子关系。这是一个0,1到多的映射。现在它有很多属性,在一个场景中,我不需要所有这些属性,只需要Id、Name和Children

public partial class Foo
{
    public Foo()
    {
        this.As = new HashSet<A>();
        this.Children = new HashSet<Foo>();
        this.Bs = new HashSet<B>();
    }

    public int FooId { get; set; }
    public Nullable<int> ParentId { get; set; }
    public string ParentName { get; set; }
    public string Name { get; set; }
    //... many more

    public virtual ICollection<A> As { get; set; }
    public virtual ICollection<Foo> Children { get; set; }
    public virtual Foo Foo2 { get; set; }
    public virtual ICollection<B> Bs { get; set; }
}
公共部分类Foo
{
公共食物(
{
this.As=new HashSet();
this.Children=newhashset();
this.Bs=新的HashSet();
}
公共int FooId{get;set;}
公共可为空的ParentId{get;set;}
公共字符串ParentName{get;set;}
公共字符串名称{get;set;}
//……更多
公共虚拟ICollection为{get;set;}
公共虚拟ICollection子项{get;set;}
公共虚拟Foo Foo2{get;set;}
公共虚拟ICollection Bs{get;set;}
}
我想将这些列表转换为

public class FooModel
{
    public FooModel()
    {
        this.Children = new HashSet<FooModel>();
    }

    public int FooId { get; set; }
    public Nullable<int> ParentId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<FooModel> Children { get; set; }
    public virtual FooModel Foo2 { get; set; }
}
公共类模型
{
公共模型()
{
this.Children=newhashset();
}
公共int FooId{get;set;}
公共可为空的ParentId{get;set;}
公共字符串名称{get;set;}
公共虚拟ICollection子项{get;set;}
公共虚拟FooModel Foo2{get;set;}
}
我正在做下面的事情

db.Foos.Where(p => p.ParentId == null).Cast<FooModel>().ToList();
db.Foos.Where(p=>p.ParentId==null.Cast().ToList();
和得到错误

无法强制转换类型为的对象 键入“System.Data.Entity.DynamicProxies.Foo_ALongNoInHexadecimal” “Namespace.ViewModel.FooModel”

是否有方法强制转换树结构以查看树的模型?

如果已定义转换,则扩展方法不应用用户定义的转换。它只能强制转换到接口或所提供类型的类继承者权限内

尝试定义一个接受您的模型的构造函数,例如

public class FooModel
{
    public FooModel(Foo myFoo)
    {
        this.Children = new HashSet<FooModel>();
        if(myFoo != null)
        {
            FooId = myFoo.FooId;
            ParentId = myFoo.ParentId;
            Name = myFoo.Name;
            //Foo2 = new FooModel(myFoo.Foo2);
            Childern = myFoo.Children.Select(c=> new FooModel(c));
        }
    }

    public int FooId { get; set; }
    public Nullable<int> ParentId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<FooModel> Children { get; set; }
    public virtual FooModel Foo2 { get; set; }
}
Cast
扩展方法不应用用户定义的转换(如果已定义转换)。它只能强制转换到接口或所提供类型的类继承者权限内

尝试定义一个接受您的模型的构造函数,例如

public class FooModel
{
    public FooModel(Foo myFoo)
    {
        this.Children = new HashSet<FooModel>();
        if(myFoo != null)
        {
            FooId = myFoo.FooId;
            ParentId = myFoo.ParentId;
            Name = myFoo.Name;
            //Foo2 = new FooModel(myFoo.Foo2);
            Childern = myFoo.Children.Select(c=> new FooModel(c));
        }
    }

    public int FooId { get; set; }
    public Nullable<int> ParentId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<FooModel> Children { get; set; }
    public virtual FooModel Foo2 { get; set; }
}
Cast
扩展方法不应用用户定义的转换(如果已定义转换)。它只能强制转换到接口或所提供类型的类继承者权限内

尝试定义一个接受您的模型的构造函数,例如

public class FooModel
{
    public FooModel(Foo myFoo)
    {
        this.Children = new HashSet<FooModel>();
        if(myFoo != null)
        {
            FooId = myFoo.FooId;
            ParentId = myFoo.ParentId;
            Name = myFoo.Name;
            //Foo2 = new FooModel(myFoo.Foo2);
            Childern = myFoo.Children.Select(c=> new FooModel(c));
        }
    }

    public int FooId { get; set; }
    public Nullable<int> ParentId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<FooModel> Children { get; set; }
    public virtual FooModel Foo2 { get; set; }
}
Cast
扩展方法不应用用户定义的转换(如果已定义转换)。它只能强制转换到接口或所提供类型的类继承者权限内

尝试定义一个接受您的模型的构造函数,例如

public class FooModel
{
    public FooModel(Foo myFoo)
    {
        this.Children = new HashSet<FooModel>();
        if(myFoo != null)
        {
            FooId = myFoo.FooId;
            ParentId = myFoo.ParentId;
            Name = myFoo.Name;
            //Foo2 = new FooModel(myFoo.Foo2);
            Childern = myFoo.Children.Select(c=> new FooModel(c));
        }
    }

    public int FooId { get; set; }
    public Nullable<int> ParentId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<FooModel> Children { get; set; }
    public virtual FooModel Foo2 { get; set; }
}

在构造函数和System.StackOverflowException中获取null引用异常在为if model not null添加条件时,您应该检查构造函数中的null对象,尝试删除Foo2=new FooModel(myFoo.Foo2)lineGetting构造函数和System.StackOverflowException中的null引用异常在为if model not null添加条件时,您应该检查构造函数中的null对象,尝试删除Foo2=new FooModel(myFoo.Foo2)lineGetting构造函数和System.StackOverflowException中的null引用异常在为if model not null添加条件时,您应该检查构造函数中的null对象,尝试删除Foo2=new FooModel(myFoo.Foo2)lineGetting构造函数和System.StackOverflowException中的null引用异常在为if model not null添加条件时,您应该检查构造函数中的null对象,尝试删除Foo2=new FooModel(myFoo.Foo2)行