简体   繁体   中英

c# in memory query of objects without linq

We are still using.Net Framework 2.0 / VS 2005 so i do not have LINQ. If i don't want to go with the poor man's LINQ solution, what are some other alternatives for being able to query in memory custom objects in a dictionary?

I'm not sure if one of your poor man's LINQ solution is LINQBridge but I used it for a few weeks and it seemed to be working okay before we actually switched to .NET 3.5 and the real deal.

Dictionary<T> would seem like a good choice, although you haven't provided much information about what you mean by "query." Are you just looking to retrieve data based on some key value? Get a count of total items? Do a sum or average based on some condition? You really need to give more information to get a better answer.

To elaborate on what Chesso said, you'll have to iterate the loop just like LINQ does...

for example:

    static T FindFirst<T>(IEnumerable<T> col, Predicate<T> predicate)
    {
        foreach(T t in col)
        {
            if(predicate(t))
            {
                return t;
            }
        }
        return default(T);
    }

I was not aware of the Predicate delegate, that seems to be pretty much what i was looking for. As far as the context for which i'm querying:

Say i have a object X with properties A (name, guaranteed to be unique) and B (age)

1) I have a series of objects in a dictionary whose keys are say Property A of a given object, and of course the value is the object iself.

Now i want to retrieve all objects in this dictionary which meet a certain criteria of B, say age > 20.

I can add all the values of the dictionary into a list then call the.FindAll on it, passing in a delegate. I can create an anonymous delegate to do this, but say i will reuse this many times. How can i dynamically specify an age criteria for the delegate method? Would the only choice be to encapsulate the Predicate method in a class, then create a new instance of that class with my criteria as an instance variable?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM