[英]Getting a single result from a LINQ statement
我有以下代碼:
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];
}
我可以看到,當我調試結果時確實具有預期的單個字符串項。 但是,我無法以我所知道的任何方式對數據進行索引或迭代。
我正在尋找可以訪問數據的地方。
這是調試器說的:
名稱:(新的System.Linq.SystemCore_EnumerableDebugView(結果))。項目[0]
價值:700.0
類型:對象{double}
PPLoadedData
是一個DataTable
。
提前致謝。
為了澄清傑森的答案:
FirstOrDefault()
。 First()
。 SingleOrDefault()
。 Single()
。 如果使用適當的方法,則在您的不變式被違反時會得到異常,這將幫助您調試程序。
如果希望查詢產生單個項目,則應使用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的答案,該答案說明了何時使用哪種方法獲得單獨的結果。
結果是集合類型。 您需要對其進行迭代Datatable.AsEnumerable 。 當result是IEneumerable<T>
類型以及LINQ在集合中返回的其他類型時,您需要像這樣進行迭代
foreach (var item in results)
{
//do some thing with item
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.