我有以下代码:
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];
}
我可以看到,当我调试时,结果确实有我期望的单个字符串项。但是,我无法通过我所知的任何方式索引或迭代数据。
我正在寻找的是我可以访问数据的东西。
以下是调试器所说的内容:
名称: (new System.Linq.SystemCore_EnumerableDebugView(results))。Items [0]
值: 700.0
类型: 对象{double}
PPLoadedData
是DataTable
。
提前致谢。
答案 0 :(得分:13)
澄清杰森的回答:
FirstOrDefault()
。First()
。SingleOrDefault()
。Single()
。如果使用适当的方法,则在违反不变量时会出现异常,这将有助于您调试程序。
答案 1 :(得分: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
通常,Linq查询返回IEnumerables,您必须迭代它,而不是通过索引访问。但是,在您只需要单个值的情况下,有几种方法可以获得所需的值。有关详细信息,请查看MSDN上的System.Linq.Enumerable。
编辑:请务必阅读Eric的答案,该答案解释了何时使用哪种方法获得个人结果。
答案 2 :(得分:2)
结果是收集类型。你需要迭代它Datatable.AsEnumerable。当结果是IEneumerable<T>
的类型以及LINQ在集合中返回的其他类型时,您需要像这样迭代
foreach (var item in results)
{
//do some thing with item
}