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