开发者

c# in memory query of objects without linq

开发者 https://www.devze.com 2023-03-02 18:24 出处:网络
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 cus

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 object开发者_JAVA百科s 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?

0

精彩评论

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

关注公众号