2009-12-14 73 views
3

我有這樣的LINQ聲明中選擇如何使用if語句從LINQ到數據集

Dim Demo = From d In DBDataTable.AsEnumerable _     
    Select id = d.Field(Of Integer)("id"), _ 
      Column = d.Field(Of Object) (_column2), _ 
      Col3 = d.Field(Of Object)(_column3), _ 
      Col4 = IIf(_Col4 <> -1, d.Field(Of Object)(_Col4), Nothing) 

有沒有我可以使用,如果/內選擇IIF什麼辦法?

+0

您通常不會在選擇部件中使用if語句。通常,where子句就足夠了。你能描述爲什麼選擇中需要'if'聲明嗎?我不明白你的代碼試圖做什麼。 –

+0

那麼,我需要檢查我動態計算的Datacol索引值,首先我需要檢查值,如果它不是-1,那麼只需要將該索引值應用於數據表,否則將返回未找到-1列在數據源中 – Learner

回答

6

[這是問題和意見的討論摘要]

您的代碼將無法正常工作,因爲IIf總是會評估真正一部分。因此,評估d.Field(Of Object)(_Col4)將引發例外,如果_Col4 = -1

相反,使用If(condition, true, false),這就像C#的condition ? true : false運營商和唯一的評價要麼真正部分,根據條件。因此,您的代碼應爲:

Dim Demo = From d In DBDataTable.AsEnumerable _ 
      Select id = d.Field(Of Integer)("id"), _ 
        Col2 = d.Field(Of Object)(_column2), _ 
        Col3 = d.Field(Of Object)(_column3), _ 
        Col4 = If(_Col4 <> -1, d.Field(Of Object)(_Col4), Nothing)