用存储库替换Linq-where语句
本文关键字:Linq-where 语句 替换 存储 | 更新日期: 2024-09-08 07:54:41
我在WPF应用程序中实现了存储库模式,如下所示:
public interface ICrud<T> where T : class
{
IEnumerable<T> GetAll();
Task<IEnumerable<T>> AsyncGetAll();
void AddNew(params T[] items);
void Delete(params T[] items);
void Update(params T[] items);
void SaveOrUpdate(params T[] items);
}
public class Crud<T> : ICrud<T> where T : class
{
public void AddNew(params T[] items)
{
using (var context = new DataEntities())
{
foreach (T item in items)
{
context.Entry(item).State = System.Data.Entity.EntityState.Added;
}
context.SaveChanges();
}
}
public void Delete(params T[] items)
{
using (var context = new DataEntities())
{
foreach (T item in items)
{
context.Entry(item).State = System.Data.Entity.EntityState.Deleted;
}
context.SaveChanges();
}
}
public void Update(params T[] items)
{
using (var context = new DataEntities())
{
foreach (T item in items)
{
context.Entry(item).State = System.Data.Entity.EntityState.Modified;
}
context.SaveChanges ();
}
}
public void SaveOrUpdate(params T[] items)
{
using (var context = new DataEntities())
{
foreach (T item in items)
{
try
{
context.Entry(item).State = System.Data.Entity.EntityState.Modified;
context.SaveChanges();
}
catch (Exception)
{
context.Entry(item).State = System.Data.Entity.EntityState.Added;
context.SaveChanges();
}
}
}
}
public IEnumerable<T> GetAll()
{
using (var context = new DataEntities())
{
DbSet<T> dbSet = context.Set<T>();
return dbSet.AsEnumerable().ToList();
}
}
public Task<IEnumerable<T>> AsyncGetAll()
{
return Task.Factory.StartNew(() =>
{
var context = new DataEntities();
DbSet<T> dbSet = context.Set<T>();
return dbSet.AsEnumerable();
});
}
}
我需要在这个实现中添加一个替代长linq where statement
的方法,我解释道:
更换
_DataContext.AddRange( (await SimpleIoc.Default.GetInstance<ICrud<Student>>().AsyncGetAll()).Where(x => x.Name == "toto" && x.Age < 30 && .....).ToList() );
例如
_DataContext.AddRange(await SimpleIoc.Default.GetInstance<ICrud<Student>>().Fetch(ListOfConditions));
我需要知道我该怎么做?有什么建议吗?
感谢
尝试使用以下
public IEnumerable<T> Search(System.Linq.Expressions.Expression<Func<T, bool>> predicate = null)
{
using(var context = new DataEntities())
{
return null != predicate
? context.Set<T>().Where(predicate).AsEnumerable()
: context.Set<T>().AsEnumerable();
}
}
您可以使用等代码调用该方法
Crud.Search(e => e.Id == 1);
其中类Crud实现接口。