我有一种让我头疼的搜索方法
var query = await dbContext.Tasks; // Gets the error here!
我该怎么解决这个问题?
这是我的代码:
public static async Task<IEnumerable<BKR.BOL.Task>> Search(string Name, string Description)
{
MyDbContext dbContext = new BKR.DAL.Context.MyDbContext();
var query = await dbContext.Tasks; // Gets the error here!
if (!string.IsNullOrEmpty(Name))
{
query = query.Where(x => x.Name == Name).ToList();
}
if (!string.IsNullOrEmpty(Description))
{
query = query.Where(x => x.Description == Description).ToList();
}
return MapToBOL(query, dbContext);
}
public static List<BKR.BOL.Task> MapToBOL(IList<DAL.Task> data, MyDbContext db)
{
var query = from d in data
select new Task(d, db)
{
TaskId = d.TaskId,
TaskTypeId = d.TaskTypeId,
TaskStatusId = d.TaskStatusId,
CustomerId = d.CustomerId,
ResourceId = d.ResourceId,
Deleted = d.Deleted,
Name = d.Name,
Description = d.Description,
StartTime = d.StartTime,
EndTime = d.EndTime,
CreatedBy = d.CreatedBy,
CreationTime = d.CreationTime,
ChangedBy = d.ChangedBy,
ChangedTime = d.ChangedTime
};
return query.ToList();
}
dbContext.Tasks
是task
对象的集合,而不是查询,并且不可用。
如果你想要数据,你需要创建一个查询,比如…
var query = await dbContext.Tasks.ToListAsync();
请注意,ToListAsync
返回一个Task
(内置的,而不是您的数据库类型(,因此是不可用的。
如果你想处理多个Where
子句,你可以这样做。。。
var query = dbContext.Tasks;
if (something) {
query = query.Where(t => t.Id == "Ferret")
}
// Other clauses can go here
var results = await query.ToListAsync();
我已经找到了这个解决方案。。。。。你觉得怎么样?
public static async Task<List<BKR.BOL.Task>> Search(bool Deleted, string Name, string Description, System.DateTime? StartTime, System.DateTime? EndTime, System.DateTime CreationTime, System.DateTime? ChangedTime)
{
MyDbContext dbContext = new BKR.DAL.Context.MyDbContext();
var query = dbContext.Tasks.AsQueryable();
if (!string.IsNullOrEmpty(Name))
{
query = query.Where(x => x.Name == Name);
}
if (!string.IsNullOrEmpty(Description))
{
query = query.Where(x => x.Description == Description);
}
return await MapToBOLAsync(query, dbContext);
}
public static Task<List<BKR.BOL.Task>> MapToBOLAsync(IQueryable<DAL.Task> data, MyDbContext db)
{
var query = from d in data
select new Task(d, db)
{
TaskId = d.TaskId,
TaskTypeId = d.TaskTypeId,
TaskStatusId = d.TaskStatusId,
CustomerId = d.CustomerId,
ResourceId = d.ResourceId,
Deleted = d.Deleted,
Name = d.Name,
Description = d.Description,
StartTime = d.StartTime,
EndTime = d.EndTime,
CreatedBy = d.CreatedBy,
CreationTime = d.CreationTime,
ChangedBy = d.ChangedBy,
ChangedTime = d.ChangedTime
};
return query.ToListAsync();
}