2013-08-29 98 views
-1

我通過具有多行且每行具有標籤並剛剛實現以下LINQ的控件進行迭代。我可以將以下查詢優化爲單個查詢嗎?單條LINQ中的多個條件

Dim xCheckTag As String = If((From xTag As Row In Sheet1.Rows Where xTag.Tag = "FtpHeader").ToArray.Length > 0, "FtpHeader", _ 
          If((From xTag As Row In Sheet1.Rows Where xTag.Tag = "MailHeader").ToArray.Length > 0, "MailHeader", _ 
          If((From xTag As Row In Sheet1.Rows Where xTag.Tag = "GoogleHeader").ToArray.Length > 0, "GoogleHeader", _ 
          If((From xTag As Row In Sheet1.Rows Where xTag.Tag = "NetworkHeader").ToArray.Length > 0, "NetworkHeader", String.Empty)))) 
+0

我會很樂意幫助,但我只做C#。你可以拿一個C#答案並使用你的VB知識來翻譯它嗎? –

+0

@AdrianSalazar ok – Sathish

回答

1

你可以使用FirstOrDefault作爲多米尼克建議,但它會返回null而不是String.Empty如果項目不匹配。我會使用DefaultIfEmpty返回適當的默認值:

Dim tags = {"FtpHeader","MailHeader","GoogleHeader","NetworkHeader"} 
Dim xCheckTag = tags.Where(Function(tag) Sheet1.Rows.Cast(Of Row)().Any(Function(xTag) xTag.Tag = tag)) _ 
        .DefaultIfEmpty(String.Empty) _ 
        .First() 
+0

sheet1.rows沒有任何 – Sathish

+0

@SATSON我已經更新了我的答案。現在試試。 – MarcinJuraszek

+0

感謝它的工作 – Sathish

0

結合使用FirstOrDefaultAny

Dim tags = {"FtpHeader","MailHeader","GoogleHeader","NetworkHeader"} 
Dim xCheckTag = If(tags.FirstOrDefault(Function(tag) Sheet1.Rows.OfType(Of Row).Any(Function(xTag) xTag.Tag = tag)), String.Empty) 
+0

sheet1.rows沒有任何 – Sathish