LinqToSQL中是否存在DataSource.Table.Where(stringOfConstraint)以支持OData?

时间:2010-10-27 17:24:36

标签: linq-to-sql entity-framework linq-to-entities odata wcf-data-services

我正在查看this Telerik演示,并且无法使“计数”语句生效。我相信只有EntityFramework支持以下命令,而不支持Linq2SQL。

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

小写的参数“where”实际上是在ADO.Net DataServices(OData)URL中传递的字符串。此URL 发送给Linq提供程序以进一步限制查询。

如果Linq2SQL不支持,我该如何发表类似声明?

2 个答案:

答案 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才有效。如果性能不是问题,那就使用它。