从LINQ语句中获取单个结果

Sea*_*n P 1 .net c# linq

我有以下代码:

private void SelectRowData(int wire, int bond, string svid)
{
    var results = from myRow in PPLoadedData.AsEnumerable()
                  where 
                      myRow.Field<Int32>("Wires.OperationOrder") == wire &&
                      myRow.Field<Int32>("Bonds.OperationOrder") == bond
                  select myRow[svid];
}
Run Code Online (Sandbox Code Playgroud)

我可以看到,当我调试时,结果确实有我期望的单个字符串项.但是,我无法通过我所知的任何方式索引或迭代数据.

我正在寻找的是我可以访问数据的东西.

以下是调试器所说的内容:

名称:( new System.Linq.SystemCore_EnumerableDebugView(results)).Items [0]

价值:700.0

输入:object {double}

PPLoadedData是一个DataTable.

提前致谢.

Eri*_*ert 13

澄清杰森的答案:

  • 如果集合可以包含任意数量的项目,请使用FirstOrDefault().
  • 如果集合始终包含一个或多个项目,请使用First().
  • 如果集合始终具有零个或一个项目,请使用SingleOrDefault().
  • 如果集合总是有一个项目,请使用Single().

如果使用适当的方法,则在违反不变量时会出现异常,这将有助于您调试程序.


Jas*_*ins 7

如果您希望查询产生单个项目,则应使用如下SingleOrDefault方法:

var result = (from myRow in PPLoadedData.AsEnumerable()
               where myRow.Field<Int32>("Wires.OperationOrder") == wire && 
                     myRow.Field<Int32>("Bonds.OperationOrder") == bond
               select myRow[svid]).SingleOrDefault();
if(result != null)
    // Do stuff with result
Run Code Online (Sandbox Code Playgroud)

通常,Linq查询返回IEnumerables,您必须迭代它,而不是通过索引访问.但是,在您只需要单个值的情况下,有几种方法可以获得所需的值.有关详细信息,请查看MSDN上的System.Linq.Enumerable.

编辑:请务必阅读Eric的答案,该答案说明何时使用哪种方法获得单独的结果.