Ironboy07
Ironboy07

Reputation: 47

List<object> select use multiple values

I want to find a specific value from a List with the method select.

My code :

public class Calc
{
    public int IdCalc { get; set; }
    public double Result { get; set; }
    public int Number { get; set; }
}

public class Program
{
    static void Main()
    {
        Calc myC1 = new Calc();
        List<Calc> liCalc = new List<Calc>();
        myC1.IdCalc = -1;
        myC1.Result = 20.2;
        myC1.Number = 1;

        Calc myC2 = new Calc();
        myC2.IdCalc = 22;
        myC2.Result = 20.2;
        myC2.Number = 2;
        liCalc.Add(myC1);
        liCalc.Add(myC2);

        double getResult = ((Calc)(liCalc.Select(Calc => Calc.IdCalc = 22 && Calc.Number = 2))).Result;

        Console.ReadKey();
    }
}

As you can see my List contains two objects: myC1 and myC2.

I just want to find the value of Result when IdCalc = 22 and Number = 2 thats why I tried to use Select but it's not working with two parameters.

Upvotes: 1

Views: 257

Answers (3)

Greg Bahm
Greg Bahm

Reputation: 648

public class Calc
{
    public int IdCalc { get; set; }
    public double Result { get; set; }
    public int Number { get; set; }
}

public class Program
{
    static void Main()
    {
        Calc myC1 = new Calc();
        List<Calc> liCalc = new List<Calc>();
        myC1.IdCalc = -1;
        myC1.Result = 20.2;
        myC1.Number = 1;

        Calc myC2 = new Calc();
        myC2.IdCalc = 22;
        myC2.Result = 20.2;
        myC2.Number = 2;
        liCalc.Add(myC1);
        liCalc.Add(myC2);
        double getResult = liCalc.First(item => item.IdCalc == 22 && item.Number == 2).Result; //Note that this will throw an exception if no item in the list satisfies the condition.

        Console.ReadKey();
    }

Upvotes: 4

Dave Zych
Dave Zych

Reputation: 21887

You could use Where, which lets you filter results based on some criteria, however that will return an IEnumerable<Calc>. Since you are only looking for a single result, you should use First which also takes a predicate and only returns the first Calc:

Calc myCalc = liCalc.First(c => c.IdCalc == 22 && c.Number == 2);
double result = myCalc.Result;

This will throw an exception if there is nothing that matches the filter, though. If you're worried about that, use FirstOrDefault which will return null if there is no match.

Upvotes: 5

shekhar
shekhar

Reputation: 1420

You could use the following statement

double getResult = liCalc.Where(Calc => Calc.IdCalc = 22 && Calc.Number = 2))).Select(y=>y.Result).FirstOrDefault();

Essentially using Where() followed by Select().

Upvotes: 2

Related Questions