Фильтр Linq возвращает повторенные данные
Приветствия,
Я пытаюсь отфильтровать список объектов с помощью метода Linq, где, однако, после выполнения фильтра список возвращает первый элемент, который выполнил условие, повторенное по всему списку (т. е. повторенное количество раз для других элементов, также выполняющих это условие). Например, я возвращаю сотрудников только с идентификатором страны = 3, и у меня должно быть три сотрудника зеленый, синий и красный, однако я получил только синий, повторенный 3 раза синий, Синий, синий.
Я использую MySql в качестве резервного хранилища и использую Entity Framework с объектом MySqlConnection
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(); }
Что я уже пробовал:
Отладка и попытка другого образца решения в списке с фиктивными данными, который работает нормально
Maciej Los
Кажется, что SelectAll
метод возвращает List(of Analytics)
, который не является List(of Employees)
...
Amr Mohammad Rashad
Я просто привожу пример того, что происходит. Действительно, метод SelectAll в коде, который я опубликовал, возвращает список аналитики. Проблема не в том, какой тип возвращается, а в том, что результат содержит повторяющийся элемент. Например, если условие фильтра должно возвращать Analytics1, Analytics2, Analytics3 и Analytics4. Он возвращает Analytics1, повторенный 4 раза Analytics1, Analytics1, Analytics1 и Analytics1
Maciej Los
Ну, пожалуйста, в следующий раз используйте "ответ" вигдет, если вы хотите сообщить мне о своем ответе.
Кажется, мы не понимаем друг друга. Если объект Analytics - это набор объектов, ваш код работает нормально, потому что именно так работают соединения на уровне базы данных...
Понял?
Amr Mohammad Rashad
OK! I will in the next time sorry did not see it :). I know what causes the problem. The problem was in the model configuration. I configured the Analytics model with an composite key, countryid and productid, respectively, the problem is that productid and countryid are repeated, they are not uniquely identify each individual row in the database. As a result the returning result list in general takes the first occurrence that fulfill the condition and repeated it number of times for all other objects that fulfill the condition too within the returned list (i.e., after fulfilling the condition I should have 532 unique object within the list of Analytics, however, I got 532 object within the list but they are not unique it took the first occurrence that fulfill the condition and repeated it 532 times).
Maciej Los
Хорошо, пожалуйста, смотрите мой ответ.
Хорошо, пожалуйста, опубликуйте свой ответ.