标签: predicatebuilder

使用PredicateBuilder/AsExpandable时如何跟踪linq查询?

我正在使用PredicateBuilder,这意味着我正在使用AsExpandable扩展方法.问题是我无法再跟踪我的SQL查询,因为当我尝试将查询强制转换为ObjectQuery时会抛出以下错误,以便我可以对它执行ObjectQuery.ToTraceString()调用...

无法将类型为"LinqKit.ExpandableQuery`1 [Genesis.Person]"的对象强制转换为"System.Data.Objects.ObjectQuery".

有任何想法吗?

linq predicatebuilder

2
推荐指数
1
解决办法
3011
查看次数

在VB.NET中使用PredicateBuilder

我在一个单独的C#项目中重新创建了Predicatebuilder类,我试图在VB.NET项目中使用它但是我一直收到以下错误:

重载决策失败,因为没有可访问的"或"接受此数量的参数.

当我像这样使用它时:

Dim predicate = PredicateBuilder.False(Of t_Quote)()
predicate = predicate.Or(Function(q) q.iQuoteType = iQuoteType)
Run Code Online (Sandbox Code Playgroud)

引用了relivant项目,我正在使用正确的import语句,它都编译没有任何错误.

知道我哪里错了吗?

这是我正在使用的C#中的PredicateBuilder类:

public static class PredicateBuilder {public static Expression> True(){return f => true; public static Expression> False(){return f => false; }

    public static Expression<Func<T, bool>> Or<T>(this
Run Code Online (Sandbox Code Playgroud)

Expression> expr1,Expression> expr2){var invokedExpr = Expression.Invoke(expr2,expr1.Parameters.Cast()); 返回Expression.Lambda>(Expression.OrElse(expr1.Body,invokedExpr),expr1.Parameters); }

    public static Expression<Func<T, bool>> And<T>(this
Run Code Online (Sandbox Code Playgroud)

Expression> expr1,Expression> expr2){var invokedExpr = Expression.Invoke(expr2,expr1.Parameters.Cast()); 返回Expression.Lambda>(Expression.AndAlso(expr1.Body,invokedExpr),expr1.Parameters); }}

vb.net lambda predicatebuilder

2
推荐指数
1
解决办法
6249
查看次数

你如何在"或"(不使用Union)上拆分或加入linq查询?

假设您正在使用两个布尔属性A和B搜索某个对象.

如果你有两个linq查询怎么办:

IQueryable<ObjectType> query = getIQueryableSomehow()
query.Where(x => x.A);

IQueryable<ObjectType> query2 = getIQueryableSomehow()
query2.Where(x => x.B);
Run Code Online (Sandbox Code Playgroud)

如何将这些查询加在一起,以便它们与此相同?:

IQueryable<ObjectType> query3 = getIQueryableSomehow()
query3.Where(x => x.A || x.B)
Run Code Online (Sandbox Code Playgroud)

我想使用query3 = query.Union(query2),但遗憾的是我的Linq提供者联盟不受支持.

我通过链接where子句来分割x => xA && xB的情况.这就是我的意思:

IQueryable<ObjectType> query = getIQueryableSomehow();
query = query.Where(x => x.A);
query = query.Where(x => x.B);
Run Code Online (Sandbox Code Playgroud)

这个或案例是否有类似的解决方法?

谢谢,

艾萨克

c# linq predicatebuilder

1
推荐指数
1
解决办法
558
查看次数

PredicateBuilder返回所有用户谓词.或者

我正在使用C#,Entity Framework Code First 4.4.0.0和.NET Framework 4.0开发一个库.

我有这个代码:

string[] keywords = null;
if (query_string != null)
    keywords = query_string.Split(' ');

// Check parameter. It will throw an exception.
ParameterCheck.CheckObjectId(user_id);

// Convert parameter to int.
int userId = Int32.Parse(user_id);

try
{
    using (var context = new AdnLineContext())
    {
        context.Configuration.ProxyCreationEnabled = false;

        //IQueryable<User> query = context.Users;
        IQueryable<User> query = context.Users.AsExpandable();
        var predicate = PredicateBuilder.False<User>();

        foreach (string keyword in keywords)
        {
            string temp = keyword;

            predicate = predicate.Or(u => u.Name.Contains(temp) ||
                                     u.State.Contains(temp) || …
Run Code Online (Sandbox Code Playgroud)

c# linq entity-framework predicatebuilder

1
推荐指数
1
解决办法
939
查看次数

即使添加了明确的false语句,PredicateBuilder仍然是正确的

我有以下声明.

var search = PredicateBuilder.True<SomeType>();
search.And(f => false);

// Still the "search" variable value is: {f => true}.
Run Code Online (Sandbox Code Playgroud)

起初,我正在尝试表达; 没有成功,所以我尝试了这个"假".不管我做了什么,它仍然是一样的.怎么了?

.net c# expression-trees predicatebuilder

0
推荐指数
1
解决办法
422
查看次数

如何对字符串数组进行包含?

我正在使用谓词构建器类,我需要在字符串数组上调用contains方法,因此在下面的代码而不是radio中我会传入一个字符串数组:

wherePredicate = wherePredicate.Or(m => m.MediaType.Contains("Radio"));
Run Code Online (Sandbox Code Playgroud)

完整的代码部分:

if (param.iMediaGroupID > 0)
{
    var wherePredicate = PredicateBuilder.False<MediaChannelModel>();

    var ss = new NeptuneRepository<Lookup_MediaTypes>();
    var mediagroups = ss.FindWhere(m => m.MediaGroupID == param.iMediaGroupID).Select(m => m.Name);
    //problem area
    wherePredicate = wherePredicate.Or(m => mediagroups.Contains(m.MediaType));
    predicate = predicate.And(wherePredicate);
}
Run Code Online (Sandbox Code Playgroud)

mediaGroups 是: ["Radio","Tv","Magazine"]

如果m.MediaType是这些值中的任何一个,则谓词为真.

有没有办法在C#中做到这一点?

c# linq predicatebuilder

0
推荐指数
1
解决办法
806
查看次数