簡體   English   中英

從LINQ語句獲取單個結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM