Поделиться через


Как преобразовать тип в общий интерфейс IEnumerable (LINQ to SQL)

Обновлен: November 2007

Для возвращения аргумента с типом универсальный IEnumerable используется AsEnumerable<TSource>.

Пример

В этом примере LINQ to SQL (с помощью заданного по умолчанию универсального Query) предпримет попытку преобразовать запрос в SQL и выполнить его на сервере. Однако предложение where ссылается на пользовательский метод на стороне клиента (isValidProduct), который не может быть преобразован в SQL.

Решением является задание клиентской универсальной реализации IEnumerable<T> предложения where для замены универсального IQueryable<T>. Для этого следует вызвать оператор AsEnumerable<TSource>.

Private Function isValidProduct(ByVal prod As Product) As Boolean
    Return prod.ProductName.LastIndexOf("C") = 0
End Function

Sub ConvertToIEnumerable()
    Dim db As New Northwnd("c:\northwnd.mdf")
    Dim validProdQuery = _
        From prod In db.Products.AsEnumerable _
        Where isValidProduct(prod) _
        Select prod
End Sub
private bool isValidProduct(Product prod)
{
    return prod.ProductName.LastIndexOf('C') == 0;
}

void ConvertToIEnumerable()
{
    Northwnd db = new Northwnd(@"c:\test\northwnd.mdf");
    Program pg = new Program();
    var prodQuery =
        from prod in db.Products.AsEnumerable()
        where isValidProduct(prod)
        select prod;
}

См. также

Другие ресурсы

Примеры запросов (LINQ to SQL)