当我形成以下代码
Rabbit[] rbt=
new Rabbit[]
{
new Rabbit{ Name="Jobby", Vegetable=new Vegetable{ VegiName="carrot"}},
new Rabbit{ Name="hobby", Vegetable=new Vegetable{ VegiName="Beetroot"}}
};
var s = from bt in rbt where
bt.Vegetable.VegiName.CompareTo("carrot") == 0 select bt;
foreach (var v in s)
{
Console.WriteLine("{0}{1}",v.Vegetable.VegiName,v.Name);
}
Run Code Online (Sandbox Code Playgroud)
我的查询只返回单行,那为什么我需要foreach迭代?我不能用
Console.WriteLine("{0}{1}",s.Vegetable.VegiName,s.Name); directly ?
Run Code Online (Sandbox Code Playgroud)
编译器如何知道您的查询只返回一行?假设您更改了数据以包含另一个胡萝卜 - 或者根本没有胡萝卜 - 您期望发生什么.
如果你肯定得到一个结果,请打电话Single来获得它.如果您可能获得多个结果,请致电First.如果您可能获得多个结果或没有结果,请致电FirstOrDefault.如果您可能得到零或一个结果,请致电SingleOrDefault.例如,对于第一种情况:
var s = from bt in rbt where
bt.Vegetable.VegiName.CompareTo("carrot") == 0 select bt;
var veg = s.Single();
Console.WriteLine("{0}{1}",veg.Vegetable.VegiName,veg.Name);
Run Code Online (Sandbox Code Playgroud)
或者:
var veg = rbt.Where(bt => bt.Vegetable.VegiName.CompareTo("carrot") == 0)
.Single();
Console.WriteLine("{0}{1}",veg.Vegetable.VegiName,veg.Name);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
331 次 |
| 最近记录: |