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