LINQ子句总是返回一个空列表
希望标题足够清楚。 我的仓库方法是这样的:LINQ子句总是返回一个空列表
public async Task<List<Model>> GetAllByCode(string code)
{
using (var ctx = new DatabaseContext())
{
return await ctx.Models.Where(m => m.Code.Equals(code)).ToListAsync();
}
}
的是方法的结果,我创造我绑定到ComboBox在视图中可观察到的集合。
Models = new ObservableCollection<Model>(await ModelRepository.GetAllByCode("code"));
但的ObservableCollection总是空。我甚至可以在调试器中看到结果(如果我没有弄错,这是一个IEnumerable
或IQueryable
集合)。我100%确定数据库没问题,因为当我使用
return await ctx.Models.ToListAsync();
它返回数据库中的所有行。
谁能告诉我我做错了什么?
编辑:
问题出在实体框架中。我仍然没有找到解决方案,但是我的上下文不会从表中检索新数据,而是总是需要缓存(我想)版本,即使我对每个请求都使用了一次性上下文。
虽然还没有回答。
的Equals可以在LINQ无法实体,如果代码是不是字符串,你可以使用String.Compare()
或(m.Code as string).Equals()
或这样的:在表
public async Task<List<Model>> GetAllByCode(string code)
{
using (var ctx = new DatabaseContext())
{
return await ctx.Models.Where(m => m.Code.ToLower() == code.ToLower()).ToListAsync();
}
}
或检查您输入这一点,一步一个调试器一步:
public async Task<List<Model>> GetAllByCode(string code)
{
using (var ctx = new DatabaseContext())
{
var all = await ctx.Models.ToListAsync();
var result = all.Where(m => m.Code.Equals(code, StringComparison.InvariantCultureIgnoreCase)));
return result;
}
}
请注意,ObservableCollection不是线程安全的。
我试过了,结果是一样的。 'result'变量包含一个IEnumerable,但是当我调用'.ToList()'并从Repo返回时,observable集合仍然是空的。 – Desomph
observalbeCollection不是线程安全的。那就是问题所在。 https:// *。com/questions/23108045/how-to-make-observablecollection-thread-safe 但是,这两个剪切工作正常与异步和等待! – cSteusloff
这可能只是一个答案,要重新检查,但我想我明白了。你可以用“非线程安全”编辑你的答案。 – Desomph
你真的在'Code'字段中有'code'的值吗? –
当然,有任何模型与'm.Code ==“代码”'?或者你是否打算写'ModelRepository.GetAllByCode(code)'而不是'ModelRepository.GetAllByCode(“code”)'? – Clemens
是的,我拥有它。我再次检查它,即使是拼写错误。 – Desomph