mvc:对不同存储库的相同查询?

时间:2011-04-12 00:58:01

标签: repository-pattern

我的朋友们,在任何糟糕的情况下,你总是帮助我:)谢谢你 我有2个或更多的存储库在他们自己的上下文中工作,返回连接到同一个基本查询的数据: public IQueryable<LQ_Group> GetAdminedGroupsQ(User user)
{
try
{
return
(from ap in context.LQ_Permissions
join g in context.LQ_Groups on
new { GroupID = ap.ObjectID, GroupTypeID = ap.ObjectTypeID }
equals
new { GroupID = g.GroupID, GroupTypeID = Dict.ObjectType[ObjectType.Group].ID }
where ((ap.SubjectID == user.ID) && (ap.SubjectTypeID == Dict.ObjectType[ObjectType.User].ID))
select g);
}
catch (Exception ex)
{
throw new UnknownRepositoryException(ex.Message);
}
}
此结果由User,Group,GroupMember和其他reposotories使用。 实现它的最佳方法是什么?我不喜欢有相同逻辑的不同副本。思考?
谢谢。

1 个答案:

答案 0 :(得分:0)

你可以这样做:

public class MyRepository
{
    private List<Item> mItems;

    public IEnumerable<Item> GetAllItems()
    {
        return this.mItems;
    }

    public IEnumerable<Item> GetGoodItems()
    {
        return this.GetAllItems().Where(x => x.IsGood == true);
    }

    public IEnumerable<Item> GetGoodItemsOverFiveDollars()
    {
        return this.GetGoodItems().Where(x => x.Price > 5.00m);
    }
}

public class Item
{
    public bool IsGood { get; set; }
    public decimal Price { get; set; }
}

您可以这样做,因为在计算枚举之前不会执行查询。但是,请记住,可以在MyRepository类之外添加其他linq语句,因此您可以使用“linq injection”;)。

您可以通过包装方法并将它们设置为内部来避免这种情况,其中包装方法调用ToList或ToArray,从而允许查询执行。

您目前如何执行查询,以及您希望减少哪些重复?你能提供一个例子吗?