как отправить фильтр LINQ в качестве параметра - PullRequest
0 голосов
/ 04 октября 2010

Вообразите, у меня есть следующее в VB:

function doSomething()

    From ou In ctxt.Users.Where(Function(p) p.UserName = username)
    ...

end function

как я могу отправить фильтр как параметр (что-то вроде ниже)?

function doSomething(filter as whatTypeHereAndHowToInstantiateInCallingFunction)

    From ou In ctxt.Users.Where(filter)
    ...

end function

спасибо

Ответы [ 3 ]

2 голосов
/ 04 октября 2010

Вы могли бы начать с чего-то вроде этого:

Sub doSomething(Of T)(filter as System.Func(Of T, Boolean))

    From ou In ctxt.Users.Where(filter)
    ...

End Sub

Я не знаю тип ctxt.Users, но вы можете просто удалить универсальный T с вашим типом и передать Func (YOURTYPE, Boolean) to doSomething.

Тогда вы можете использовать его следующим образом:

doSomething(Function(p) p.UserName = username)
1 голос
/ 04 октября 2010

Вы также можете использовать предикат, например:

<TestMethod()> _
Public Sub test1()
    Assert.AreEqual("a", WhereExample(Function(x) x = "a"))
End Sub

Public Function WhereExample(ByVal filter As Predicate(Of String)) As String
    Dim str = New String() {"a", "b", "c"}
    Return str.ToList.FindAll(filter).FirstOrDefault
End Function
1 голос
/ 04 октября 2010

Ваш тип параметра фильтра должен быть Выражение > Я полагаю. Затем вы можете передать ему лямбда-выражение, которое вы можете использовать в качестве переменной.

Если вы используете LINQ-to-objects, вы можете просто использовать Func в качестве типа параметра.

...