2015-03-14 2 views
0

Я очень новичок в C# и MVC.Отфильтруйте некоторые уникальные данные с LINQ и C#

Моя проблема:

У меня есть список идентификаторов

int[] mylist = {10, 23} 

Я пытаюсь запросить некоторые данные из БД

var result = db.tableName.Where(o => mylist.Any(y => y == o.item_ID && o.readed)).ToList(); 

Это то, что я получаю с запросом:

item_ID Product_ID readed 
277  1232  1 
277  1233  1 
277  1235  1 
280  1235  1 

Что я ПЕД является:

item_ID Product_ID readed 
277  1235  1 
280  1235  1 

Если изменить «любой», чтобы «все» я не получаю никаких результатов, но я определенно один пункт, где условие подходит.

Я думаю, что это больше похоже на запрос с идентификатором 277, затем запрос с 280, а затем слияние списка и возвращение только там, где соответствует «Product_ID».

Любые идеи?

+0

Я рекомендовал бы проверить, что запрос действительно работает с базой данных, либо из приведенных ниже ответов. Например, вы можете использовать профилировщик SQL Server, если ваша БД является SQL Server. –

+0

Пожалуйста, не могли бы вы разместить http://sscce.org/ вместе с результатами ОЖИДАЕМЫЕ. Попробуйте разместить на https://dotnetfiddle.net/ – Aron

+0

Включает ли ваш 'myList' в 272 и 280? –

ответ

1

Я полагаю, что то, что вам нужно это:

var temp = db.tableName.Where(o => mylist.Any(y => y == o.item_ID && o.readed)) 
         .ToList(); 

// Find the Product_id which appeared more than one time 
// By the way, this assumes that there is at least one product_Id whihc has appeared more than one time 
var neededProductID = temp.GroupBy(x => x.Product_ID) 
          .Where(x => x.Count() > 1) 
          .First() 
          .Key; 

// Filter the result by neededProductID 
var result = temp.Where(x => x.Product_ID == neededProductID).ToList(); 

Кроме того, если может быть более тха один PRODUCT_ID который apperaed более чем один раз, то вы можете рассмотреть это:

var neededProductID = temp.GroupBy(x => x.Product_ID) 
          .Where(x => x.Count() > 1) 
          .Select(x => x.Key) 
          .ToList(); 

var result = temp.Where(x => neededProductID.Any(y => y == x.Product_ID)).ToList(); 

Кстати, вам не нужно All(). Он сообщает вам, соответствуют ли все элементы в коллекции определенному условию.

+0

Это не работает :(Я все еще получаю смешанный список –

+0

Затем, пожалуйста, обновите свой вопрос с помощью ввода и вывода образца? –

+0

Я добавил изображение на мой вопрос, я в настоящее время использую ваше решение, имеет наибольший смысл. –

0

Вы можете использовать следующие

var result = db.tableName.Where(o => mylist.conains(o.item_ID) && o.readed).ToList();

+0

Это не работает :(Я все еще получаю смешанный список –

+0

Можете ли вы попытаться сравнить версию SQL с тем, что вы хотите достичь – Saravanan

+0

, можете ли вы взглянуть на вопрос сейчас? –

Смежные вопросы