У меня есть проект Visual Studio 2008 C # .NET 3.5, использующий драйвер ADO.Net для MySQL v6.4.4.
В настоящее время у меня есть запрос к моему хранилищу, который выглядит следующим образом:
TaskEntities repository = /* derived from global::System.Data.Objects.ObjectContext */
var task_query = from task in repository.TaskSet
from tc in task.TestCases
where tc.Status.Count == 0
orderby task.Order
select task;
foreach (Task task in task_query.ToList())
{
// do useful stuff...
}
Это отлично работает, но мне нужно иметь возможность абстрагироваться от доступа к базе данных. Итак, я хочу заменить TaskEntities
классом Repository
, который по-прежнему разрешает запросы. Примерно так:
public class Repository : IDisposable
{
private TaskEntites repository_;
// ...
// is this remotely correct?
public Task[] Query(System.Linq.Expressions.Expression<Func<Task, bool>> query)
{
return repository_.TaskSet.Where(query).ToArray();
}
}
Repository repository;
var task_query = repository.Query( ??? );
foreach (Task task in task_query)
{
// do useful stuff ....
}
Что мне нужно сделать, чтобы иметь возможность запрашивать базу данных через класс Repository
. Должен ли Query()
принять Linq.Expressions.Expression
объект? Как?