0

我做了以下 linq 查询

var results = from myRow in QCAllDataSet.DataTable1.AsEnumerable()
                                      where myRow.Field<String>("ESRNumber") == value
                                      select new ESR(myRow.ESRNumber,
                                                           myRow.CreationDate,
                                                           myRow.Subsystem,
                                                           myRow.Name,
                                                           myRow.Product,
                                                           myRow.Version,
                                                           myRow.ESRStatus,
                                                           myRow.Owner,
                                                           myRow.Priority,
                                                           myRow.LastPHNote,
                                                           myRow.LastPHNoteDate,
                                                           myRow.LastPHNoteUser,
                                                           myRow.DaysFromLastUpdate,
                                                           myRow.Customer,
                                                           myRow.T2Owner,
                                                           myRow.T2Group,
                                                           myRow.comment,
                                                           myRow.ESRAge);

我想转换resultsESR对象

有点像ESR t=(ESR)results

但我收到以下错误:

无法将类型“System.Data.EnumerableRowCollection”转换为 ESR

我应该怎么做这个?

4

3 回答 3

1

用于FirstOrDefault从结果中仅获取一项。

var esrObject=  (from myRow in QCAllDataSet.DataTable1.AsEnumerable()
 where myRow.Field<String>("ESRNumber") == value
  select new ESR(myRow.ESRNumber,
                  myRow.CreationDate,
                  myRow.Subsystem)).FirstOrDefault();

SingleOrDefault 当您确定您的集合将只返回一条记录时,您可以使用,否则使用 FirstOrDefault。FirstOrDefault将返回序列的第一个元素,如果序列不包含任何元素,则返回默认值。因此,即使您的集合表达式返回多行,您也不必担心。

于 2012-04-26T22:20:21.520 回答
1

当您select使用 LINQ 时,您将返回一个集合,即使您打算只检索一个结果。要指示单个结果,请使用Single()LINQ 方法:

ESR t = results.Single();

如果它可能不返回任何结果(不匹配),那么您可以使用SingleOrDefault()并检查 null:

ESR t = results.SingleOrDefault();
if (t == null)
    // could not find match
于 2012-04-26T22:20:23.680 回答
1

AnEnumerable<T>不是单个对象,即使它只包含一个对象。你必须指定你想要什么。有很多扩展方法,Enumerable例如:

例如:

List<ESR> allESR = results.ToList();
ESR firstESR = results.First(); // throws an exception if there is not at least one
ESR firstESR = results.FirstOrDefault(); // returns null if there's not at least one

请注意,在您调用这些方法之一之前不会执行查询(或foreach to iterate them)由于 LINQ 的延迟执行而使用 a 。

于 2012-04-26T22:26:26.420 回答