将条件添加到list getter属性

时间:2014-10-13 19:45:09

标签: c# entity-framework generics

我有2个poco对象:

public abstract class BasePoco
{
    public int Id { get; set; }
    public bool IsDeleted { get; set; }
}

public class FirstPoco : BasePoco
{
    public virtual List<SecondPoco> SecondPocos { get; set; }
}
public class SecondPoco : BasePoco
{
}

当我从我的Repository实现中查询first = 10:

的firstPoco对象时
var first = Repository.Get<FirstPoco>(10);

我在我的存储库中实现了一个自定义逻辑,所有对象都匹配:

x=>!x.IsDeleted

但是有没有办法如何为SecondPoco的相关集合实现这个?

目前我不得不写:

var secondCollection = first.SecondPocoes.Where(x=>!x.IsDeleted);

有没有办法如何一般地做到这一点?

修改 这是我的Get方法:

private IQueryable<T> GetQueryable<T>() where T : BasePoco
{
    return _context.Set<T>().AsQueryable().Where(x => !x.IsDeleted);
}
public T Get<T>(int id) where T : BasePoco
{
    return GetQueryable<T>().FirstOrDefault(x => x.Id == id);
}

2 个答案:

答案 0 :(得分:0)

这对我来说有什么意义。只需将公共财产包裹在您的实际收藏品周围。

public class FirstPoco : BasePoco
{
    private virtual List<SecondPoco> _secondPocos;
    public virtual List<SecondPoco> SecondPocos 
    {
       get {return _secondPocos.Where(x => !x.IsDeleted);} 
       set { _secondPocos = value;} 
    }
}

答案 1 :(得分:0)

如果它们都来自相同的基础对象,并且IsDeleted方法分别位于每个基础对象中:

public abstract class BasePoco
{
    public int Id { get; set; }
    public bool IsDeleted { get; set; }
}

public class FirstPoco : BasePoco
{
    public virtual List<BasePoco> ChildPocos { get; set; }
}

public class SecondPoco : BasePoco
{

}

var secondCollection = first.ChildPoco.Where(x=>!x.IsDeleted);

我不知道你想对他们做什么,但是你可以通过一个简单的电话获得所有这些。

public IEnumerable<BasePoco> Build()
    {
        var basePoco = typeof (BasePoco);
        return Assembly.GetExecutingAssembly().GetTypes()
            .Where(type => entityRule.IsAssignableFrom(type) && type.GetConstructor(Type.EmptyTypes) != null)
            .Select(Activator.CreateInstance)
            .Cast<BasePoco>();
    }

这将为您提供从基础poco继承的所有类的列表,您可以迭代它们以获得您想要的内容。