我在linq to sql中使用这个C#:
string currentLabel = from s2f in stream2FieldTypesTable
where s2f.s2fID == item.s2fID
&& (s2f.s2fLabel != item.s2fLabel || s2f.s2fIsRequired != item.s2fIsRequired)
select s2f.s2fLabel;我收到一个编译器错误,说我不能将类型System.Linq.IQueryable<string>赋值给string。
我试过这段代码:
string currentLabel = from s2f in stream2FieldTypesTable
where s2f.s2fID == item.s2fID
&& (s2f.s2fLabel != item.s2fLabel || s2f.s2fIsRequired != item.s2fIsRequired)
select s2f.s2fLabel.ToString();这将返回相同的错误。我相信这是一件很简单的事情。我遗漏了什么?我只需要第一个与where子句匹配的s2fLabel。
发布于 2010-12-19 03:27:46
查询的实际类型将是IEnumerable。LINQ有一个deffered execution的概念,为了让你的查询真正被执行,你需要调用一个遍历LINQ的方法
string currentLabel = (from s2f in stream2FieldTypesTable
where s2f.s2fID == item.s2fID
&& (s2f.s2fLabel != item.s2fLabel || s2f.s2fIsRequired != item.s2fIsRequired)
select s2f.s2fLabel)
.FirstOrDefault();为了获得精确的实例,它可以是FirstOrDefault()方法或SignleOrDefault(),或者只是First()或Single()。唯一的区别是,如果枚举不能满足它们的期望,没有"OrDefault()“的方法将抛出异常,而具有"OrDefault()”的方法将只返回null。
编辑
Single和First之间的区别是Single期望集合中的一个确切的元素,而First期望至少一个元素。
发布于 2014-08-17 10:27:25
int id =Convert.ToInt32(db.Table.Single(x => x.Id == id_factor).Id);发布于 2010-12-19 03:27:46
尝试使用First()或FirstOrDefault()来代替(或补充) ToString()。
First和FirstOrDefault返回单个记录,而不是第一个查询所做的记录集合。
https://stackoverflow.com/questions/4479692
复制相似问题