LINQ Where子句总是返回一个空列表

时间:2017-09-27 12:32:54

标签: c# wpf list linq generic-collections

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

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始终为空 。我甚至可以在调试器中看到结果(如果我没有弄错,它是IEnumerableIQueryable集合。我100%确定数据库没问题,因为当我使用

return await ctx.Models.ToListAsync();

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

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

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

但仍未回答。

1 个答案:

答案 0 :(得分:0)

如果代码不是字符串,则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不是线程安全的。