开发者

Filter a list of objects using a property that is another list. Using linq

开发者 https://www.devze.com 2022-12-27 16:26 出处:网络
I\'ve a nice situation, I think at beginning this a usual query but I\'m having some problem trying to solve this, the situation is:

I've a nice situation, I think at beginning this a usual query but I'm having some problem trying to solve this, the situation is:

I've a list of "Houses", and each house have a list of "Windows". And I want to filter for a catalog only the Houses witch have a Blue windows, so my extension method of H开发者_如何学Pythonouse is something like:

public static List<House> FilterByWindow (this IEnumerable<House> houses, Window blueOne){

    var list = houses.Select(p=>p.Windows.Where(q=>q.Color == blueOne.Color));
    return list.ToList();
}

Is this correct or I'm losing something? Some better suggestion?


If you want to search for House instances containing blue Windows, then use the existing Any extension:

var blueWindowHouses =
    from h in houses
    where h.Windows.Any(w => w.Color == blueOne.Color)
    select h;

What you have right now is not correct. The Select extension does not filter - it is a projection, and you aren't assigning the result to anything, so that line you have is effectively a no-op.

Also, by wrapping this logic in a method, you can prevent the expression compiler from being able to translate it into a SQL statement. Instead, write it all in one shot, as I have above, or accept and return an IQueryable<House> instead of accepting an IEnumerable<House> and returning a List<House>.


return houses.Where(house => house.Windows.Any(window => window.Color == blue))
             .ToList();
0

精彩评论

暂无评论...
验证码 换一张
取 消