List<object> select 使用多个值
List<object> select use multiple values
我想使用 select 方法从列表中查找特定值。
我的代码:
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 但它不能使用两个参数。
您可以使用以下语句
double getResult = liCalc.Where(Calc => Calc.IdCalc = 22 && Calc.Number = 2))).Select(y=>y.Result).FirstOrDefault();
基本上使用 Where() 后跟 Select()。
您可以使用 Where
,它允许您根据某些条件过滤结果,但是这将 return 和 IEnumerable<Calc>
。由于您只是在寻找一个结果,因此您应该使用 First
,它也有一个谓词,并且只有 return 是第一个 Calc
:
Calc myCalc = liCalc.First(c => c.IdCalc == 22 && c.Number == 2);
double result = myCalc.Result;
不过,如果没有与过滤器匹配的内容,这将引发异常。如果您担心这一点,请使用 FirstOrDefault
,如果没有匹配项,它将 return null
。
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();
}
我想使用 select 方法从列表中查找特定值。
我的代码:
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 但它不能使用两个参数。
您可以使用以下语句
double getResult = liCalc.Where(Calc => Calc.IdCalc = 22 && Calc.Number = 2))).Select(y=>y.Result).FirstOrDefault();
基本上使用 Where() 后跟 Select()。
您可以使用 Where
,它允许您根据某些条件过滤结果,但是这将 return 和 IEnumerable<Calc>
。由于您只是在寻找一个结果,因此您应该使用 First
,它也有一个谓词,并且只有 return 是第一个 Calc
:
Calc myCalc = liCalc.First(c => c.IdCalc == 22 && c.Number == 2);
double result = myCalc.Result;
不过,如果没有与过滤器匹配的内容,这将引发异常。如果您担心这一点,请使用 FirstOrDefault
,如果没有匹配项,它将 return null
。
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();
}