汎用 IEnumerable への型の変換Convert a Type to a Generic IEnumerable

汎用 AsEnumerable として型指定された引数を返すには、IEnumerable を使用します。Use AsEnumerable to return the argument typed as a generic IEnumerable.

Example

この例では、LINQ to SQLLINQ to SQL (既定の汎用 Query を使用) は、クエリを SQL に変換し、サーバー上での実行を試みます。In this example, LINQ to SQLLINQ to SQL (using the default generic Query) would try to convert the query to SQL and execute it on the server. しかし、where 句が、SQL に変換できない、ユーザー定義のクライアント側メソッド (isValidProduct) を参照しています。But the where clause references a user-defined client-side method (isValidProduct), which cannot be converted to SQL.

これを解決するには、クライアント側の汎用 IEnumerable<T> 実装の where を指定し、汎用 IQueryable<T> を置き換えます。The solution is to specify the client-side generic IEnumerable<T> implementation of where to replace the generic IQueryable<T>. AsEnumerable 演算子を呼び出すことによって、これを行います。You do this by invoking the AsEnumerable operator.

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

関連項目See also