Sdílet prostřednictvím


Převod typu na obecnou položku IEnumerable

Slouží AsEnumerable k vrácení argumentu zadaného jako obecný IEnumerable.

Příklad

V tomto příkladu by se LINQ to SQL (pomocí výchozího obecného Query) pokusil převést dotaz na SQL a spustit ho na serveru. Klauzule where ale odkazuje na uživatelsky definovanou metodu na straně klienta (isValidProduct), kterou nelze převést na SQL.

Řešením je určit obecnou IEnumerable<T> implementaci na straně klienta, která where má nahradit obecný IQueryable<T>. Provedete to vyvoláním operátoru AsEnumerable .

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;
}
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

Viz také