我正在查看this Telerik演示,并且无法使“计数”语句生效。我相信只有EntityFramework支持以下命令,而不支持Linq2SQL。
return CurrentDataSource.Products.Where(where).Count();
小写的参数“where”实际上是在ADO.Net DataServices(OData)URL中传递的字符串。此URL 应发送给Linq提供程序以进一步限制查询。
如果Linq2SQL不支持,我该如何发表类似声明?
答案 0 :(得分:1)
您需要对Queryable.Where
方法使用的谓词使用lambda表达式:
return CurrentDataSource.Products.Where(p => p.Id > 100).Count();
如果你真的想使用字符串,那么请看看动态LINQ,从Scott Gu的博客文章Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library)开始。然后你应该能够编写类似于:
的查询return CurrentDataSource.Products.Where("Id > 100").Count();
答案 1 :(得分:0)
您可以编写自己的通用扩展,如何编写最有效的扩展名取决于具体情况......但它可能应该是这样的:
public static class IQueryableExtensions
{
public static int Count(this IQueryable<T> query)
{
return query.ToList().Count;
}
}
这可能不是最有效的方法,只有拥有IQueryable才有效。如果性能不是问题,那就使用它。