LinqToSQL 中不存在 DataSource.Table.Where(stringOfConstraint) 来支持 OData?

发布于 2024-09-29 00:21:45 字数 428 浏览 8 评论 0原文

我正在查看这个 Telerik 演示,并且我无法让“count”语句发挥作用。我相信以下命令仅在 EntityFramework 上受支持,而不是 Linq2SQL。

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

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

如果 Linq2SQL 不支持这一点,我该如何做出类似的语句?

I'm looking at this Telerik demo, and am unable to get the "count" statement to work. I believe that the following command is only supported on EntityFramework, and not Linq2SQL.

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

The parameter "where" in lowercase is actually a string that is passed in the ADO.Net DataServices (OData) url. This URL should be sent to the Linq provider to further constrain the query.

If that is not supported in Linq2SQL, how can I make a similar statement?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

锦欢 2024-10-06 00:21:45

您需要对 Queryable.Where 方法使用的谓词使用 lambda 表达式:

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

如果您确实想使用字符串,请查看 Dynamic LINQ,从 Scott Gu 的博客文章开始:动态 LINQ(第 1 部分:使用 LINQ 动态查询库)。然后您应该能够编写类似于以下内容的查询:

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

You need to use a lambda expression for the predicate used by the Queryable.Where method:

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

If you really want to use a string then take a look at Dynamic LINQ, starting with Scott Gu's blog post: Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library). Then you should be able to write queries similar to:

return CurrentDataSource.Products.Where("Id > 100").Count();
╰沐子 2024-10-06 00:21:45

您可以编写自己的通用扩展,如何编写最有效的扩展取决于具体情况...但它可能应该是这样的:

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

这可能不是最有效的方法,并且仅在您有 IQueryable 时才有效。如果性能不是问题就使用它。

You could write your own generic extension, how you should write the most effective one depends on the situation... but it should probably be something like:

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

This is probably not the most effective way and only works if you have an IQueryable. If performance is not a problem just use it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文