2015-10-12 4 views
1

Я хочу найти определенное значение из списка с помощью метода select.Список <object> выберите несколько значений

Мой код:

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

Как вы можете видеть, что мой список содержит два объекта: myC1 и myC2.

Я просто хочу найти значение Результат, когда IdCalc = 22 и Number = 2, поэтому я попытался использовать Select, но он не работает с двумя параметрами.

+3

использование где вместо выбора и его == одиночными = для присвоения –

+0

После того, как вы используете, где бросок может быть вынут –

+0

Привет Я пытался Где, но у меня такая же проблема, у меня есть ошибка невозможно cast 'WhereListIterator' в типе Calc. Я пробую это: double getResult = ((Calc) (liCalc.Where (Calc => Calc.IdCalc == 22 && Calc.Number == 2))) Результат; – Ironboy07

ответ

5

Вы можете использовать Where, что позволяет фильтровать результаты на основе некоторых критериев, однако это вернет IEnumerable<Calc>. Поскольку вы ищете только для одного результата, вы должны использовать First, который также принимает предикат и возвращает только первый Calc:

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

Это будет сгенерировано исключение, если нет ничего, что соответствует фильтру, хотя. Если вы беспокоитесь об этом, используйте FirstOrDefault, который вернет null, если нет совпадения.

2

Вы можете использовать следующее заявление

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

По существу, используя Where(), а затем выберите().

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