C#IQueryable或AsQueryable

时间:2011-02-08 21:06:15

标签: c# interface repository iqueryable

我正在对某种类型的存储库进行原型设计,我想知道是否有足够的方法来运行序列

例如:

public void AddEntities<T>(IQueryable<T> sequence);

现在,这个方法原型看起来很好,并且非常泛型,但是当有人想做类似的事情时,它会很糟糕:

var t = new T();
// Add just a single entity.
repository.AddEntities(???);

此案例有哪些解决方案?

我应该将界面放大并添加AddSingleEntity<T>(T t)RemoveSingleEntity<T>(T t)之类的方法,还是应该保留原样并使用以下内容:

repository.AddEntities(new List { new T() }.AsQueryable());

两种选择显然都有缺点:第一种选择使得界面更加丑陋而不那么紧凑,第二种看起来有点奇怪。

你会做什么以及为什么?

3 个答案:

答案 0 :(得分:3)

我会创建其他方法来处理单个实体操作,因为它看起来更干净,并且有很多常见的接口(List)

编辑:如果我想只有一个方法组,我会怎么做:

public void Add<T>(IEnumerable<T> entities) { ... }

public void Add<T>(params T[] entities) { this.Add(entities.AsEnumerable()); }

您现在可以致电:

repo.Add(entity);
repo.Add(entity1, entity2);
repo.Add(entityList);

答案 1 :(得分:2)

为什么不添加repository.AddEntity(T t)?简单又好看。看起来有点过分了。

答案 2 :(得分:2)

在这种特殊情况下,我不会使用IQueryable。这是一个查询。 阅读this有用的文章。发送数据时使用IEnumerable。