Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.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
C# 如何使用LINQtoSQL从行中选择一列_C#_Asp.net_Linq To Sql - Fatal编程技术网

C# 如何使用LINQtoSQL从行中选择一列

C# 如何使用LINQtoSQL从行中选择一列,c#,asp.net,linq-to-sql,C#,Asp.net,Linq To Sql,我将此C与linq to sql一起使用: string currentLabel = from s2f in stream2FieldTypesTable where s2f.s2fID == item.s2fID && (s2f.s2fLabel != item.s2fLabel || s2f.s2fIsRequired != item.s2fIsRequired)

我将此C与linq to sql一起使用:

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 currentLabel = from s2f in stream2FieldTypesTable
                      where s2f.s2fID == item.s2fID
                      && (s2f.s2fLabel != item.s2fLabel || s2f.s2fIsRequired != item.s2fIsRequired)
                      select s2f.s2fLabel.ToString();

这将返回相同的错误。我相信这很简单。我错过了什么?我只需要与where子句匹配的第一个s2fLabel。

查询的实际类型将是IEnumerable。LINQ的概念是,为了实际执行查询,您需要调用一个在IEnumerable上迭代的方法:

要获得精确的一个实例,可以是FirstOrDefault方法或SignleOrDefault,也可以是First或Single。唯一的区别是,如果枚举不能满足它们的期望,没有OrDefault的方法将抛出异常,而带有OrDefault的方法将只返回null

编辑

Single和First之间的区别在于Single需要集合中的一个元素,First需要至少一个元素。

请尝试First或FirstOrDefault,而不是ToString或ToString之外的元素

First和FirstOrDefault返回一条记录,而不是一组记录,这是您的第一个查询所执行的操作。

请尝试以下代码

var result = (from s2f in stream2FieldTypesTable
                      where s2f.s2fID == item.s2fID
                      && (s2f.s2fLabel != item.s2fLabel || s2f.s2fIsRequired != item.s2fIsRequired)
                      select s2f.s2fLabel).First();
这是需要,因为你的结果是

IEnumerable<String>

你需要做的就是在你的LINQ前后加上括号,然后使用。第一个默认值是你只需要一个值,这个值有字符串currentLabel

字符串currentLabel=来自中的s2f stream2FieldTypesTable 其中s2f.s2fID==项目s2fID &&s2f.s2fLabel!=需要项目s2f.s2f.s2f != 第5.2项:需要 选择s2f.s2fLabel.FirstOrDefault


Single、First和FirstOrDefault之间有什么区别?返回类型是这里的突出因素,而不是延迟执行。突出因素下的含义是什么?这似乎与问题无关,但即使是,这个问题已经有近四年的历史了,并且已经有很多好的答案,其中一个已经被接受。如果你在寻找代表积分,这不是一种方法。
IEnumerable<String>
 int id =Convert.ToInt32(db.Table.Single(x => x.Id == id_factor).Id);