如何使用linq to sql从行中选择一列

时间:2010-12-18 19:24:37

标签: c# asp.net linq-to-sql

我正在使用这个C#和linq到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();

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

5 个答案:

答案 0 :(得分:13)

您的查询的实际类型将是 IEnumerable 。 LINQ有一个deffered execution的概念,为了让你查询实际的exectuted,你需要调用一个迭代 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。

修改

Single First 之间的区别在于 Single 需要确切的元素集合 >首先期望至少一个元素。

答案 1 :(得分:2)

 int id =Convert.ToInt32(db.Table.Single(x => x.Id == id_factor).Id);

答案 2 :(得分:1)

尝试使用First()FirstOrDefault()代替(或除此之外)ToString()

FirstFirstOrDefault会返回单个记录,而不是记录集合,这是您的第一个查询所做的。

答案 3 :(得分:1)

试试此代码

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>

答案 4 :(得分:1)

你需要做的就是在你的LINQ之前和之后添加括号然后使用.FirstOrDefault()你只想要单个值(你的bcoz你有字符串currentLabel)。

  

string currentLabel =(来自s2f in   stream2FieldTypesTable                         其中s2f.s2fID == item.s2fID                         &安培;&安培; (s2f.s2fLabel!= item.s2fLabel || s2f.s2fIsRequired   != item.s2fIsRequired)                         选择s2f.s2fLabel).FirstOrDefault();