-1

我正在通过具有多行且每行具有标签的控件进行迭代,并且刚刚实现了以下 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))))
4

2 回答 2

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()
于 2013-08-29T10:18:39.490 回答
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)
于 2013-08-29T10:14:41.720 回答