试图获取Guid?通过linq
本文关键字:通过 linq Guid 获取 | 更新日期: 2023-09-27 18:28:26
我需要从Table1中获取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,并且其类型为IQueryable<Guid?>
IQueryable<Guid?> guids =
from R in Table1
join P in Table2
on R.Id equals P.Id2
where R.Name == 'blah blah'
select R.Id;
如果需要一个guid,请使用First
、Single
、FirstOrDefault
或SingleOrDefault
Guild? guid = guids.FirstOrDefault();
或者在单个语句中:
Guid? guid = Table1.Where(R => R.Name == "blah")
.Join(Table2, R => R.Id, P => P.Id2, (R,P) => R.Id)
.FirstOrDefault();
混合语法(不幸的是,在查询语法中没有等效的FirstOrDefault
运算符):
Guid? guid = (from R in Table1
join P in Table2
on R.Id equals P.Id2
where R.Name == 'blah blah'
select R.Id).FirstOrDefault();
Enumerable.Select
返回一个IEnumerable<T>
,它是一个序列,因此通常是多个项目。如果您想要第一个项目,请使用First
或(如果可以为空)FirstOrDefault
:
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();
该LINQ语句的返回值是GUID的列表。具体地,一个IEnumerable<Guid>
。
如果您只希望得到一个结果,请对查询结果调用.First()
;如果您最终可能没有结果,而只想收到一个null,请调用.FirstOrDefault()
。
(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()
IQueryable表示对某种存储(例如SQL Server)的查询,并且可能返回0,1或更多行。你正试图得到其中一个。要获得单行,请使用First/FirstOrDefault或single/SingleOrDefult 等方法
您需要使用Single或SingleOrDefault或First或FirstOrDefault方法。它们只存在于lambda语法中。如果希望得到一个结果,请使用Single,如果是1或0,则使用SingleOrDefault。
试试这个代码
使用as 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();