【问题标题】:Convert C# linq code to VB. [ Edited ]将 C# linq 代码转换为 VB。 [已编辑]
【发布时间】:2012-10-03 11:39:34
【问题描述】:

我想将我的一些 EntityFramework C# 代码移植到 VB.NET。我正在尝试不同的在线代码转换器,但他们无法为我解决这个问题。

我有这两个功能。

public List<T> Find<T>(Func<T, bool> predicate) where T : class
    {
        var objectSet = db.CreateObjectSet<T>();
        return objectSet.Where<T>(predicate).ToList();
    }

    public void Delete<T>(Func<T, bool> predicate) where T : class
    {
        var objectSet = db.CreateObjectSet<T>();
        IEnumerable<T> records = from x in objectSet.Where<T>(predicate) select x;

        foreach (T record in records)
        {
            objectSet.DeleteObject(record);
        }
    }

现在转换器告诉我这个:

Public Function Find(Of T As Class)(predicate As Func(Of T, Boolean)) As List(Of T)
    Dim objectSet = db.CreateObjectSet(Of T)()
    Return objectSet.Where(Of T)(predicate).ToList()
End Function

Public Sub Delete(Of T As Class)(predicate As Func(Of T, Boolean))
    Dim objectSet = db.CreateObjectSet(Of T)()
    Dim records As IEnumerable(Of T) = From x In objectSet.Where(Of T)(predicate) Select x

    For Each record As T In records
        objectSet.DeleteObject(record)
    Next
End Sub

但我得到两个错误,都是objectSet.Where&lt;T&gt;(predicate),即:

重载解析失败,因为没有可访问的“Where”接受此数量的类型参数。

【问题讨论】:

  • 您两次发布相同的代码。
  • 你能附上你的 vb.net 代码吗?
  • 现在它没有 VB.NET 和 C# 代码

标签: c# vb.net linq entity-framework


【解决方案1】:

只需从您对Where 的调用中删除类型参数,无论如何都没有必要。其次,确定一种风格:要么使用 LINQ,要么使用函数,而不是两者兼而有之。

也就是说,

  • 要么写:

    Dim records As IEnumerable(Of T) = From x In objectSet Where predicate(x) Select x
    

    ...但在 VB 中你可以省略 Select x:

    Dim records As IEnumerable(Of T) = From x In objectSet Where predicate(x)
    
  • 或写:

    Dim records As IEnumerable(Of T) = objectSet.Where(predicate)
    

Find 也一样。简单写:

Return objectSet.Where(predicate).ToList()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多