2013-08-29 6 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 в Dominic предложил, но он вернется 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

Использование FirstOrDefault в сочетании с Any:

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

Смежные вопросы