这个 C# 代码在 VB.NET 中的等效代码是什么?

5

VB.NET中对应此C#代码的等效代码是什么?

    ctx.Load(site,
                x => x.Lists.Where(l => l.Title != null));

我已经尝试过

 ctx.Load(site, Function(x) x.Lists.Where(Function(l) l.Title IsNot Nothing))

但是这样会出现错误:"The expression (Convert(l.Title) != null) is not supported."

想法


标题是一个恰好是字符串类型的属性。 - Bob
4个回答

2

如果Title是字符串,尝试使用IsNullOrEmpty();

或者

如果Title是可空类型,尝试使用Nullable(Of T).HasValue。

或者

Sub Main()

        Dim list As New List(Of A)

        Dim a1 As New A
        a1.Title = "sqws"
        Dim a2 As New A
        a2.Title = Nothing


        list.Add(a1)
        list.Add(a2)

        Dim q = From c In list Where c.Title IsNot Nothing

    End Sub



    Public Class A

        Dim t As String

        Public Property Title() As String
            Get
                Title = t
            End Get
            Set(ByVal value As String)
                t = value
            End Set
        End Property

    End Class

我已经尝试过这些方法,但是:1)类型不可为空,它是一个字符串。2)似乎无法在lambda语句中进行字符串比较... - Bob

2

这可能有点作弊,但我过去曾使用Reflector反编译我的C#代码,并将其显示为其他.NET语言,只是为了看看它们在我最熟悉的C#中会是什么样子。


0

你尝试过IsNothing函数吗?

ctx.Load(site, Function(x) x.Lists.Where(Function(l) Not IsNothing(l.Title)))

编辑:

既然您已经指定了Title是一个字符串,那么您应该使用IsNullOrEmpty函数。

ctx.Load(site, Function(x) x.Lists.Where(Function(l) Not String.IsNullOrEmpty(l.Title)))

当我在Lambda表达式中尝试这样做时,我收到一个错误,指出IsNnothing成员不能在表达式中使用... - Bob

0

这个应该可以工作:

ctx.Load(site, Function(x) x.Lists.Where(Function(l) l.Title.IsNullOrEmpty = False))

如果不行,请告诉我错误信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接