【问题标题】:LINQ Where Clause always returns an empty list [duplicate]LINQ Where 子句总是返回一个空列表 [重复]
【发布时间】:2017-09-27 12:32:53
【问题描述】:

希望标题足够清晰。 我的存储库方法如下所示:

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 始终为空。我什至可以在 Debugger 中看到结果(如果我没记错的话,它是 IEnumerableIQueryable 集合)。我 100% 确定数据库没问题,因为当我使用时

return await ctx.Models.ToListAsync();

它返回数据库中的所有行。

谁能告诉我我做错了什么?

编辑:
问题出在实体框架中。我仍然没有找到解决方案,但我的上下文没有从表中检索新数据,而是他总是采用缓存(我想)版本,即使我对每个请求都使用一次性上下文。

但还是没有回答。

【问题讨论】:

  • Code 字段中的值code 真的有吗?
  • 确定有m.Code == "code"的模型吗?或者您是否打算写 ModelRepository.GetAllByCode(code) 而不是 ModelRepository.GetAllByCode("code")
  • 是的,我有。我仔细检查了它,即使是拼写错误。
  • 你能分享一些示例数据吗?
  • 你有没有试过追踪ef生成的实际sql?

标签: c# wpf list linq generic-collections


【解决方案1】:

如果 Code 不是字符串,则等于可能在 LINQ to Entity 中失败,您可以使用 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 中返回它时,可观察集合仍然是空的。
  • a observalbeCollection 不是线程安全的。那就是问题所在。 stackoverflow.com/questions/23108045/… 但是两者都可以在异步和等待中正常工作!
  • 这可能只是一个答案,要重新检查,但我想我明白了。你能用“非线程安全”编辑你的答案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 2012-05-18
  • 2014-09-18
相关资源
最近更新 更多