2013-08-29 4 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

DefaultIfEmpty을 사용하면 기꺼이 도와 드리겠습니다.하지만 저는 C#만을 사용합니다. C# 응답을 받고 VB 지식을 사용하여 번역 할 수 있습니까? –

+0

@AdrianSalazar ok – Sathish

답변

1

당신은 도미닉 제안 FirstOrDefault로 사용할 수 있지만, 항목의 비는 일치하는 경우는 null 대신 String.Empty 반환합니다.

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

Any와 함께 FirstOrDefault 사용 :

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