Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 查询列表-仅返回一个值_Linq_List - Fatal编程技术网

Linq 查询列表-仅返回一个值

Linq 查询列表-仅返回一个值,linq,list,Linq,List,我已经创建了一个结构和列表 public struct CarMake { public string name; public string id; } 我向这个(汽车制造商)添加了结构对象,并试图查询 string selCar = from c in carMakers where c.name == selectedCarMfgName select c.id; 在select语句附

我已经创建了一个结构和列表

  public struct CarMake
{
    public string name;
    public string id;

}
我向这个(汽车制造商)添加了结构对象,并试图查询

     string  selCar = from c in carMakers
                 where c.name == selectedCarMfgName
                 select c.id;
在select语句附近出现错误-无法将IEnumerable隐式转换为字符串。我知道查询只返回一个值,这就是为什么我会这样做

谢谢

  string  selCar = (from c in carMakers
                     where c.name == selectedCarMfgName
                     select c.id).SingleOrDefault();
查询返回一个集合(包含一个元素)。您应该使用
Single()
(或
SingleOrDefault()
)获取该项。如果查询可以返回多个结果,则应查看
First()
(或
FirstOrDefault()


查询返回一个集合(包含一个元素)。您应该使用
Single()
(或
SingleOrDefault()
)获取该项。如果查询可以返回多个结果,您应该查看
First()
(或
FirstOrDefault()

我会稍微重构我的查询:

var selCar = carMakers.Single(c => c.name == selectedCarMfgName).id;

这假设您知道该车在列表中。如果没有,请使用
SingleOrDefault
并在获取
id

之前检查返回值。我会稍微重构我的查询:

var selCar = carMakers.Single(c => c.name == selectedCarMfgName).id;

这假设您知道该车在列表中。如果没有,请使用
SingleOrDefault
并在获取
id

之前检查返回值。我对LINQ做得不多,但由于要选择一个字符串,您可能需要使用FirstOrDefault,因为您的语句可以返回多个值,但字符串只能包含一个值


First将返回空值我认为如果没有找到任何内容,FirstOrDefault将返回一个空字符串。

我对LINQ没有做太多的处理,但是因为您正在选择一个字符串,您可能需要使用FirstOrDefault,因为您的语句可以返回多个值,但您的字符串只能包含一个值


First将返回空值我认为如果没有找到任何内容,FirstOrDefault将返回一个空字符串。

请注意错误消息。可能是这样说的

"cannot implicitly convert IEnumerable<string> to string." 
不同之处在于
First*
变体可以处理具有多个元素的序列,而
Single*
变体将在存在多个元素时抛出异常。
*OrDefault
变体支持无匹配元素的概念,并返回类型的默认值(类为null,结构为默认值(如0表示
int


使用符合您期望的版本。如果您希望有一个且只有一个匹配项,请选择
单个
。如果您只关心任意多个中的一个,则首选
第一个

请注意错误消息。可能是这样说的

"cannot implicitly convert IEnumerable<string> to string." 
        carMakers.Add(new CarMake() { name = "Audi", id = "1234" });
        string selCar =(from c in carMakers
                        where c.name == "Audi"
                        select c.id).FirstOrDefault();
不同之处在于
First*
变体可以处理具有多个元素的序列,而
Single*
变体将在存在多个元素时抛出异常。
*OrDefault
变体支持无匹配元素的概念,并返回类型的默认值(类为null,结构为默认值(如0表示
int

使用符合您期望的版本。如果您希望有一个且只有一个匹配项,请选择
单个
。如果您只关心任意多个中的一个,则首选
第一个

        carMakers.Add(new CarMake() { name = "Audi", id = "1234" });
        string selCar =(from c in carMakers
                        where c.name == "Audi"
                        select c.id).FirstOrDefault();
产出-1234

产出-1234