C# 试图获取Guid?林克大道
我需要从表1中获取id值,它是一个Guid。此查询也可以返回null。所以我从以下几点开始C# 试图获取Guid?林克大道,c#,.net,linq,C#,.net,Linq,我需要从表1中获取id值,它是一个Guid。此查询也可以返回null。所以我从以下几点开始 Guid? SomeID = from R in Table1 join P in Table2 on R.Id equals P.Id2 where R.Name == 'blah blah' select R.Id; 但我得到以下编译错误 无法隐式转换类型“System.Linq.IQueryable” 到“System.Guid?” 更改Guid?对Guid没有帮
Guid? SomeID = from R in Table1
join P in Table2
on R.Id equals P.Id2
where R.Name == 'blah blah'
select R.Id;
但我得到以下编译错误
无法隐式转换类型“System.Linq.IQueryable”
到“System.Guid?”
更改Guid?对Guid没有帮助
Guid SomeID = from R in Table1
join P in Table2
on R.Id equals P.Id2
where R.Name == 'blah blah'
select R.Id;
现在我得到以下错误
无法隐式转换类型“System.Linq.IQueryable”
到“System.Guid”
我做错了什么?您的查询返回所有匹配的GUID,并且它的类型为
IQueryable
或在单个语句中:
Guid? guid = Table1.Where(R => R.Name == "blah")
.Join(Table2, R => R.Id, P => P.Id2, (R,P) => R.Id)
.FirstOrDefault();
混合语法(遗憾的是,查询语法中没有与FirstOrDefault
运算符等效的语法):
该LINQ语句的返回值是GUID列表。具体来说,
IEnumerable
如果您只希望得到一个结果,请对查询结果调用
.First()
;如果您可能最终没有结果,只希望接收空值,请调用.FirstOrDefault()
。IQueryable表示对某种存储(例如SQL Server)的查询,并且可能返回0,1或更多行。你正试图得到其中一个。要获取单行,请使用First/FirstOrDefault或single/singleOrdEvent等方法,您需要使用或或或方法。它们仅以lambda语法存在。如果希望得到一个结果,请使用Single,如果为1或0,则使用SingleOrDefault。可枚举。Select
返回一个IEnumerable
,这是一个序列,因此通常是多个项。如果需要第一项,请使用first
或(如果可以为空)first或default
:
(from R in Table1
join P in Table2
on R.Id equals P.Id2
where R.Name == 'blah blah'
select R.Id).FirstOrDefault() //or .SingleOrDefault()
Guid? SomeID = (from R in Table1
join P in Table2
on R.Id equals P.Id2
where R.Name == 'blah blah'
select R.Id).First();
试试这个代码
使用作为Guid
请看下面:
Guid SomeID = (from R in Table1
join P in Table2
on R.Id equals P.Id2
where R.Name == 'blah blah'
select R.Id).First() as Guid;
或者试试看
Guid SomeID = (Guid) from R in Table1
join P in Table2
on R.Id equals P.Id2
where R.Name == 'blah blah'
select R.Id).First();
如果一个结果是预期的单一是更好的。它可能会更好,也可能不会更好地使用单一。获得多个结果是否是异常情况完全取决于此代码的周围环境,尽管作者确实暗示他期望一个或零(在零的情况下,
First
和Single
都会导致异常)。您的代码将解决此转换问题吗?我认为这是一个转换问题。是吗?@RameshRajendran:我已经试着解释了这个问题。linq查询返回一个IEnumerable
,这是所有集合类型实现的接口。所以基本上它是一种用于多个项目的类型。但是您需要一个Guid
。因此,您要么必须更改类型(例如,IEnumerable ID=..
),要么必须使用First/FirstOrDefault/Single/SingleOrDefault
来获取一项。噢!我理解。谢谢。你的代码可以解决这个转换问题吗?我认为这是一个转换问题。对吗?@RameshRajendran不,Id是表中的Guid。将IQueryable
分配给Guid?
类型的变量时出现问题
Guid? SomeID = (from R in Table1
join P in Table2
on R.Id equals P.Id2
where R.Name == 'blah blah'
select R.Id).First();
Guid SomeID = (from R in Table1
join P in Table2
on R.Id equals P.Id2
where R.Name == 'blah blah'
select R.Id).First() as Guid;
Guid SomeID = (Guid) from R in Table1
join P in Table2
on R.Id equals P.Id2
where R.Name == 'blah blah'
select R.Id).First();