0

EntityFramework C#コードの一部をVB.NETに移植したいと思います。別のオンラインコードコンバーターを試していますが、この問題を解決できません。

私にはこれらの2つの機能があります。

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

しかし、2つのエラーが発生します。どちらも次のobjectSet.Where<T>(predicate)とおりです。

アクセス可能な'Where'がこの数の型引数を受け入れないため、過負荷の解決に失敗しました。

4

1 に答える 1

4

の呼び出しからtype引数を削除するだけで、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()
于 2012-10-03T12:02:43.500 に答える