c# - 如何使用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)
                      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();

这会返回相同的错误。我相信这是一件简单的事情。我错过了什么?我只想要第一个 s2fLabel匹配 where 子句。

最佳答案

您查询的实际类型将是IEnumerable。 LINQ 有一个概念 deffered execution ,为了让你的查询实际执行,你需要调用一个方法来遍历 IEnumerable:

    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。

编辑

SingleFirst 之间的区别是 Single 期望集合中有exact one 元素,首先需要至少一个元素。

关于c# - 如何使用linq to sql从行中选择一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4479692/

相关文章:

c# - TreeNode 广度第一个枚举?

c# - Linq-to-SQL 超时

c# - 在c#中使用linq执行存储过程

c# - 如何禁用 GridView 中的内联编辑?

asp.net - 凭据未在生产服务器中的 WCF 调用中传递

c# - 将枚举与从数据库返回的整数值进行比较的最简单方法是什么

linq-to-sql - Linq to SQL - 错误处理

c# - 调度定时器构造函数

c# - 开源媒体播放器

c# - ICollection<T> 不是协变的?