我有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);
}
答案 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继承的所有类的列表,您可以迭代它们以获得您想要的内容。