Универсальный метод GetByIDs LINQ-to-SQL - PullRequest
2 голосов
/ 12 мая 2011

В настоящее время я использую это для получения объекта по значению его первичного ключа.

Я пытаюсь найти способ создания аналогичного метода GetByID, где я могу передать IEnumerable (of object) иdo ids.contains (pk), но здесь нет выражения Contains.

Кто-нибудь знает, как мне это сделать?

Public Function GetByID(Of T As Class)(ByVal pk As Object) As T
    Dim itemParam = Expression.Parameter(GetType(T), "item")
    Return GetTable(Of T).Single(
        Expression.Lambda(Of Func(Of T, Boolean))(
            Expression.Equal(
                Expression.Property(itemParam, GetPrimaryKeyName(Of T)),
                Expression.Constant(pk)
                ),
            New ParameterExpression() {itemParam}
            )
        )
End Function

Public Function GetPrimaryKeyName(Of T)() As String
    Return Mapping.GetTable(GetType(T)).RowType.IdentityMembers(0).Name
End Function

1 Ответ

1 голос
/ 12 мая 2011

Вам нужно использовать Expression.Call

Обновление - разные перегрузки

Expression.Call(typeof(Enumerable),
                "Contains",
                new Type[] { Expression.Constant(...).Type }
                Expression.Property(...),
                Expression.Constant(...));
...