Linq过滤器重复返回数据

时间:2018-03-09 19:48:10

标签: c# linq

我正在尝试使用Linq方法过滤对象列表然而,在过滤器执行之后,列表返回了满足整个列表中重复条件的第一个元素(即,重复其他元素实现完成的次数)条件也是)。例如,我返回的员工只有国家ID = 3,我应该有三名员工绿色,蓝色和红色,但是,我只有蓝色重复3次蓝色,蓝色,蓝色。

我使用MySql作为我的后备存储,我正在使用带有MySqlConnection对象的Entity Framework

public class Repository<T> : IRepository<T> where T : class
{
    public IEnumerable<T> SelectAll()
    {
        return db.Set<T>().ToList();
    } 
}


public class AnalyticsRepository : Repository<Analytics>
{
    public new List<Analytics> SelectAll()
    {
        return base.SelectAll().ToList<Analytics>();
    }
}

public IEnumerable<Analytics> SelectByCountryAndProduct(string countrycriteria, string productcriteria)
{
    List<Analytics> result = null;

    using (AppDbContext db = new AppDbContext(factory.GetConnection()))
    {
        db.Database.CommandTimeout = 6000;
        analyticsRepository = new AnalyticsRepository(db);
        result = analyticsRepository.SelectAll();
    }

    return result
        .Where( a => a.CountryId.ToString() == countrycriteria && a.ProductId.ToString() == productcriteria)
        .ToList();
}

调试并尝试使用虚拟数据列表的另一个示例解决方案

1 个答案:

答案 0 :(得分:0)

我知道导致问题的原因。问题在于分析模型配置。我分别使用复合密钥CountryId和ProductId配置了Analytics。另一方面,CountryId和ProductId一起不唯一地标识数据库中的行。它们在返回的结果集中重复出现。应用过滤器之后,我只得到第一次出现的重复次数的其他对象符合过滤条件。例如,假设我在应用Linq之后有532个具有相同国家/地区ID和产品ID的行,我在返回列表中重复了532行中的第一次出现。