Alexander_F
Alexander_F

Reputation: 2877

Filter some unique Data with LINQ and C#

i am very new with C# and MVC.

My Problem:

I have a list OF IDs

int[] mylist = {10, 23}

I try to query some data from DB

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

This is what I get with the query:

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

What I need is:

item_ID Product_ID readed
277     1235       1
280     1235       1

If I change "any" to "all" i don't get any results, but I have definitely one item where the condition fits.

I think its more like make a query with id 277, then a query with 280 and then merge the list and return only where where "Product_ID" match.

Any ideas?

Upvotes: 0

Views: 113

Answers (2)

Farhad Jabiyev
Farhad Jabiyev

Reputation: 26635

I assume that what you need is this:

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();

Also, if there could be more tha one Product_ID which has apperaed more than one time, then you can consider this:

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();

By the way, you don't need All(). It tells you if all the elements in a collection match a certain condition.

Upvotes: 1

Saravanan
Saravanan

Reputation: 7854

You can use the following

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

Upvotes: 0

Related Questions