首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何扩展DynamicQuery.cs以实现.Single方法?

如何扩展DynamicQuery.cs以实现.Single方法?
EN

Stack Overflow用户
提问于 2010-03-28 08:18:49
回答 3查看 359关注 0票数 1

我需要为我正在处理的一个项目编写一些动态查询。我发现我的程序在Count和First方法上花费了大量的时间,所以我开始更改为.Single,结果发现没有这样的方法。

下面的代码是我第一次尝试创建一个(主要是从Where方法复制的),但它不起作用。帮助?

代码语言:javascript
复制
 public static object Single(this IQueryable source, string predicate, params object[] values)
    {
        if (source == null) throw new ArgumentNullException("source");
        if (predicate == null) throw new ArgumentNullException("predicate");
        LambdaExpression lambda = DynamicExpression.ParseLambda(source.ElementType, typeof(bool), predicate, values);
        return source.Provider.CreateQuery(
            Expression.Call(
                typeof(Queryable), "Single",
                new Type[] { source.ElementType },
                source.Expression, Expression.Quote(lambda)));
    }
EN

回答 3

Stack Overflow用户

发布于 2010-03-28 08:36:06

在执行查询时,您应该只使用SingleSingleOrDefault即可。

代码语言:javascript
复制
// build your dynamic query
var query = NorthwindConext.Products.Categories
                                    .Where("CategoryID = @0", 2);
// now you can simply get the single item by
var category = query.SingleOrDefault();

因此,我认为没有必要为动态linq使用“单一”运算符。特别是,因为查询枚举返回的IEnumerableIQueryable应该只包含一项。

票数 1
EN

Stack Overflow用户

发布于 2010-03-28 11:45:25

我不明白你填写的Single(SingleOrDefault)和First(FirstOrDefault)之间的区别是什么?此外,EF不实现第一个,您必须使用第一个(FirstOrDefault)来代替。还有,为什么你要通过创建你自己的single实现来提高性能呢?你的评论几乎是where的一个副本,几乎和first一样,所以为什么不使用它,并尝试查看生成的查询并分析它们呢?

票数 1
EN

Stack Overflow用户

发布于 2010-03-28 09:10:19

我想Queryable.Single就是你要找的人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2531445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档