DataSource.Table.Where (stringOfConstraint) не существует в LinqToSQL для поддержки OData? - PullRequest
0 голосов
/ 27 октября 2010

Я смотрю на это Telerik demo и не могу заставить работать оператор "count".Я считаю, что следующая команда поддерживается только в EntityFramework, но не в Linq2SQL.

return  CurrentDataSource.Products.Where(where).Count();

Параметр "where" в нижнем регистре фактически является строкой, которая передается в URL-адресе ADO.Net DataServices (OData).Этот URL следует отправить поставщику Linq для дальнейшего ограничения запроса.

Если это не поддерживается в Linq2SQL, как я могу сделать подобное утверждение?

Ответы [ 2 ]

1 голос
/ 27 октября 2010

Вам нужно использовать лямбда-выражение для предиката, используемого методом Queryable.Where:

return CurrentDataSource.Products.Where(p => p.Id > 100).Count();

Если вы действительно хотите использовать строку, взгляните на Dynamic LINQ, начиная с Скотта Гусообщение в блоге: Динамический LINQ (Часть 1. Использование библиотеки динамических запросов LINQ) .Тогда вы сможете писать запросы, похожие на:

return CurrentDataSource.Products.Where("Id > 100").Count();
0 голосов
/ 27 октября 2010

Вы можете написать свое собственное общее расширение, как вы должны написать наиболее эффективное, зависит от ситуации ... но это, вероятно, должно быть что-то вроде:

public static class IQueryableExtensions 
{
    public static int Count(this IQueryable<T> query)
    {
       return query.ToList().Count;
    }
}

Это, вероятно, не самое эффективноеспособ и работает только если у вас есть IQueryable.Если производительность не проблема, просто используйте ее.

...