标签: predicatebuilder

C#PredicateBuilder实体:参数"f"未绑定在指定的LINQ to Entities查询表达式中

我需要构建一个动态过滤器,我想继续使用实体.由于这个原因,我想使用albahari的PredicateBuilder.

我创建了以下代码:

var invoerDatums = PredicateBuilder.True<OnderzoeksVragen>();
var inner = PredicateBuilder.False<OnderzoeksVragen>();

foreach (var filter in set.RapportInvoerFilter.ToList())
{
    if(filter.IsDate)
    {
        var date = DateTime.Parse(filter.Waarde);
        invoerDatums = invoerDatums.Or(o => o.Van >= date && o.Tot <= date);
    }
    else
    {
        string temp = filter.Waarde;
        inner = inner.Or(o => o.OnderzoekType == temp);
    }
}

invoerDatums = invoerDatums.And(inner);
var onderzoeksVragen = entities.OnderzoeksVragen
                               .AsExpandable()
                               .Where(invoerDatums)
                               .ToList();
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,只有一个过滤器,它不是日期过滤器.因此只有内部谓词被填充.执行谓词时出现以下错误.

参数"f"未绑定在指定的LINQ to Entities查询表达式中.

在搜索答案时,我找到了以下页面.但这已经在LINQKit中实现了.

是否有其他人遇到此错误并知道如何解决?

c# linq-to-entities predicatebuilder

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

PredicateBuilder是如何工作的

Nutshell中的C#有一个名为PredicateBuilder的免费类,它可以在这里逐个构造LINQ谓词.这是该方法的一个摘录,它为谓词添加了一个新表达式.有人可以解释一下吗?(我已经看到了这个问题,我不想要那样的一般性答案.我正在寻找Expression.Invoke和Expression.Lambda如何构建新表达式的具体解释).

public static Expression<Func<T, bool>> And<T> (this Expression<Func<T, bool>> expr1,
                                                     Expression<Func<T, bool>> expr2)
{
    var invokedExpr = Expression.Invoke (expr2, expr1.Parameters.Cast<Expression> ());
    return Expression.Lambda<Func<T, bool>>
        (Expression.AndAlso (expr1.Body, invokedExpr), expr1.Parameters);
}
Run Code Online (Sandbox Code Playgroud)

.net c# linq expression-trees predicatebuilder

32
推荐指数
1
解决办法
4万
查看次数

带有核心数据的Xcode 4中的图形谓词生成器

我正在使用Xcode 4,我找不到使用图形谓词构建器的方法.它还在吗?我该如何使用它?这方面的文件在哪里?

谢谢

core-data predicatebuilder xcode4

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

(化合物)Xcode 4中的谓词生成器 - 它在哪里?

首先,这个问题与使用核心数据的Xcode 4中的Graphical Predicate Builder密切相关.但是,我还没有足够高的评价来发表评论,而且由于我没有回答,我会问一个更具体细节的新问题.

我一直在这里撞墙,所以我要提供尽可能多的细节......

问题:Apple Core Data文档仍在引用Xcode 3,并为Fetched Properties和Fetch Request Templates 显示了一个高度复杂的图形谓词构建器.这包括以图形方式创建任意复杂度的复合谓词的能力,例如:

在此输入图像描述

这显然是一个非常强大的工具,可以有效地使用Core Data,而且就我和其他人所知,这个功能要么丢失,要么被Xcode 4隐藏起来.

现在,基于上面链接的SO问题,我们至少知道在XCode 4中是否添加了获取请求:

在此输入图像描述

随后,您可以在右侧窗格中访问一个非常基本的图形谓词编辑器:

在此输入图像描述

但是这个图形编辑器没有提供苹果文档中指出的复杂复杂性(显然仍然与XCode 3相关).而且,正如另一个SO问题中所提到的,这仍然没有回答如何访问Fetched Properties的任何类型的图形谓词构建器的问题.

据我所知,如果你添加一个Fetched Property,它会出现在你的Core Data编辑器中,但无法访问谓词构建器.扩大:

在Xcode 3中,详细信息窗格提供了一个"编辑谓词"按钮,用于打开Predicate Builder:

在此输入图像描述

以下是XCode 4中的可比较视图:

在此输入图像描述

可以看出,没有"编辑谓词"按钮.

问题:

1)XCode 4中的所有这些功能在哪里?如上所示,到目前为止我唯一接近Predicate Builder的东西就是非常简单的Fetch Request编辑器,它没有提供我能够找到的复合/复杂谓词能力.

而且,我想在这里明确一点:除非我遗漏了一些明显的东西,否则当你创建一个获取请求时出现在XC4中的这个简单的FetchRequest编辑器不是这个问题的答案.它给你的唯一条件选项是选择以下[无/全部/任何]是否为真.这甚至没有接近XCode 3的Predicate Builder的功能,具有复杂的关系和可选的变量等.

2)同样的问题,也是特别针对Fetched Properties.

我的假设是Apple不仅仅删除了在XCode 4中以图形方式创建复杂复合谓词的功能,包括Fetched Properties和Fetch Request Templates.但是我在绳子的尽头想弄清楚它藏在哪里......

提前致谢.

core-data predicatebuilder ios xcode4

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

PredicateBuilder <True>和PredicateBuilder <False>之间的区别?

我有代码:

   var predicate = PredicateBuilder.True<Value>();

predicate = predicate.And(x => x.value1 == "1");
predicate = predicate.And(x => x.value2 == "2");

var vals = Value.AsExpandable().Where(predicate).ToList();
Run Code Online (Sandbox Code Playgroud)

如果我有PredicateBuilder.True<Value>(),它会带回我的期望,但如果我有PredicateBuilder.False<Value>(),它会带回0记录.有人可以解释这是什么区别,为什么在一个场景中我得到0记录在另一个我得到我期望的.我已经阅读了PredicateBuilder这份文件,但有点令人困惑.我觉得这与我Anding在一起的谓词有关吗?

c# linq entity-framework predicatebuilder linqkit

11
推荐指数
2
解决办法
4823
查看次数

如何动态创建谓词

您好我想使用谓词表达式基于搜索字符串创建列表.

我有一个类型产品列表包含不同的名称.

List<products> list1 = new List<products>();

        list1.Add(new products("sowmya"));
        list1.Add(new products("Jane"));
        list1.Add(new products("John"));
        list1.Add(new products("kumar"));
        list1.Add(new products("ramya"));
        listBox1.ItemsSource = list1;
Run Code Online (Sandbox Code Playgroud)

现在我想根据用户输入过滤内容.用户将输入n个字符串,并带有'+'作为分隔符.收到字符串后,我会将它们传递给谓词对象

 private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        List<products> list2 = new List<products>();
        Expression<Func<products, bool>> predicate = PredicateBuilder.True<products>();
        if (e.Key == Key.Enter)
        {
            string Searchstring = textBox1.Text.ToString().Trim();
            string[] separator = new string[] { "+" };
            string[] SearchItems=Searchstring.Split(separator,StringSplitOptions.None);
            foreach (string str in SearchItems)
            {
                string temp = str;
                predicate =p => p.Name.Contains(temp.ToLower());                   
            }

            list2 = list1.AsQueryable().Where(predicate).ToList();
            listBox1.ItemsSource = list2;
        }
    } …
Run Code Online (Sandbox Code Playgroud)

.net c# linq list predicatebuilder

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

LINQ to SQL PredicateBuilder

我在这里使用PredicateBuilder http://www.albahari.com/nutshell/predicatebuilder.aspx,一切都很好,现在我可以生成动态LINQ到SQL表达式,但我不明白的是为什么当我在这样的循环上:

var inner = PredicateBuilder.False<MyType>();
foreach (var f in Filtermodel.InstrumentsFilterList.Where(s => s.isActive))
        {
          int temp = f.InstrumentID;
          inner = inner.Or(ud => ud.InstrumentId == temp);
        }
Run Code Online (Sandbox Code Playgroud)

为什么我必须使用那个临时变量?,我尝试使用"f"迭代器变量,但它只获取列表中每个迭代的最后一个值,就像它通过引用传递一样...

linq-to-sql predicatebuilder

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

Sitecore搜索Predicate Builder多个关键字搜索,提升功能无法正常工作

我有sitecore pages/lucene文档,包含以下字段:

  • 标题
  • 文件名
  • 内容
  • 文件内容

我正在创建搜索这些并具有以下要求:

  • 应首先返回包含标题字段中整个短语的匹配.
  • 包含文件名字段中的整个短语的命中应该返回第二个.
  • 包含内容中整个短语的点击数应返回第三位
  • 包含文件内容中的整个短语的命中应该返回第四
  • 包含标题字段所有关键字(按任意顺序)的匹配应返回第五位
  • 包含文件名字段所有关键字(按任意顺序)的命中应返回第六位
  • 包含内容中所有关键字(按任意顺序)的匹配应返回第七.
  • 包含文件内容所有关键字(按任意顺序)的匹配应返回第八.

这是我得到的:

    public static Expression<Func<T, bool>> GetSearchTermPredicate<T>(string searchTerm) 
        where T : ISearchableItem
    {
        var actualPhrasePredicate = PredicateBuilder.True<T>()
            .Or(r => r.Title.Contains(searchTerm).Boost(2f))
            .Or(r => r.FileName.Contains(searchTerm).Boost(1.5f))
            .Or(r => r.Content.Contains(searchTerm))
            .Or(r => r.DocumentContents.Contains(searchTerm));

        var individualWordsPredicate = PredicateBuilder.False<T>();

        foreach …
Run Code Online (Sandbox Code Playgroud)

lucene lucene.net sitecore predicatebuilder sitecore8

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

无法使用LINQ to Entities和LinqKit/PredicateBuilder进行重构

我一直在尝试将LINQ表达式重构为一个方法,并且已经遇到了" Internal .NET Framework Data Provider error 1025."和" The parameter 'xyz' was not bound in the specified LINQ to Entities query expression."异常.

以下是实体模型的相关部分(使用EF 4.2/LINQ to Entities):

public class Place : Entity
{
    public string OfficialName { get; protected internal set; }
    public virtual ICollection<PlaceName> { get; protected internal set; }
}

public class PlaceName : Entity
{
    public string Text { get; protected internal set; }
    public string AsciiEquivalent { get; protected internal set; }
    public virtual Language …
Run Code Online (Sandbox Code Playgroud)

linq-to-entities expression-trees predicatebuilder entity-framework-4 linqkit

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

为什么即使在每次迭代时重新创建查询,也会应用多个过滤器

我在使用Microsoft App Studio创建的项目中的一个名为Filter.cs的文件中找到了以下代码.虽然我是一名资深的C#程序员,但我缺乏LINQ谓词表达式构建器的经验.我可以告诉它下面的代码是"元逻辑",用于灵活地构建查询,给出包含类型字段信息的过滤谓词列表以及要注入子表达式的一组数据值.我无法弄清楚的是以下语句中的"表达式"变量:

query = query.Where(expression).AsQueryable()" 
Run Code Online (Sandbox Code Playgroud)

..将每个字段的表达式连接成一个更复杂的查询表达式,最终在代码的末尾执行以创建ObservableCollection 结果.如果它是" query + = "我可以推断链接动作就像一个事件处理程序字段,但作为一个直接的赋值语句,它让我感到困惑,因为我希望它能替换表达式变量从最后一个循环迭代得到的最后一个值,从而在过程中重置它并丢失其先前的值.这里发生了什么?

public class Filter<T>
{
    public static ObservableCollection<T> FilterCollection(
        FilterSpecification filter, IEnumerable<T> data)
    {
        IQueryable<T> query = data.AsQueryable();               
        foreach (var predicate in filter.Predicates)
        {
            Func<T, bool> expression;
            var predicateAux = predicate;
            switch (predicate.Operator)
            {
                case ColumnOperatorEnum.Contains:
                    expression = x => predicateAux.GetFieldValue(x).ToLower().Contains(predicateAux.Value.ToString().ToLower());
                    break;
                case ColumnOperatorEnum.StartsWith:
                    expression = x => predicateAux.GetFieldValue(x).ToLower().StartsWith(predicateAux.Value.ToString().ToLower());
                    break;
                case ColumnOperatorEnum.GreaterThan:
                    expression = x => String.Compare(predicateAux.GetFieldValue(x).ToLower(), predicateAux.Value.ToString().ToLower(), StringComparison.Ordinal) > 0;
                    break;
                case ColumnOperatorEnum.LessThan:
                    expression = …
Run Code Online (Sandbox Code Playgroud)

c# linq ienumerable predicatebuilder

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