标签: predicate

使用带有函数的C#Count()

我试图通过使用带有谓词的Linq来计算出数组在阵列中出现的最大值的次数.Count().但是,我不完全明白该怎么做.从阅读MSDN的例子我认为我理解,但显然不是!

这就是我的想法:

string[] test = { "1", "2", "3", "4", "4" };
string max = test.Max();
Label1.Text = test.Count(p => p == max);
Run Code Online (Sandbox Code Playgroud)

但那没用.所以我尝试将max更改为整数以查看是否可行,但这也不起作用.

c# linq predicate max

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

包含属性且其父级父级包含另一个属性的XPath元素

这是我在这里的第一篇文章,因为我看到很多很棒的答案,我想我会试一试.

我正在尝试使用XPath来获取HTML文档中的特定元素.以下是基于Google网页的示例:

<html>
  <head>
    <title>XPath Test</title>
  </head>
  <body>
    <form name='f'>
      <table>
        <tbody>
          <tr>
            <td>
              <input name='q' type="text" />
            </td>
          </tr>
        </tbody>
      </table>
    </form>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

使用上面的示例(为了寻求帮助而简化),我希望能够找到名称为'q'的输入元素,以及谁是具有名称='f的5个父母的祖先".

例如,如果我在SWAT的语法中执行此操作,SWAT是位于http://ulti-swat.wikispaces.com的开源Web自动化测试库,则语法如下:

| AssertElementExists |表达式|名= Q; parentElement.parentElement.parentElement.parentElement.parentElement.name = F |输入|

我刚开始学习XPath,并试图了解如何将谓词与轴结合起来.是否可以使用XPath执行此类表达式?如果有的话,知识渊博的人请帮忙吗?

xpath element predicate axes parent

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

ruby idiom:谓词和条件运算符

我喜欢明智地使用三元条件运算符.在我看来,它非常简洁.

但是,在ruby中,我发现我经常测试谓词方法,它们已经有了自己的问号:

some_method( x.predicate? ? foo : bar )
Run Code Online (Sandbox Code Playgroud)

这两个问号彼此如此接近,我感到震惊.是否存在等效的紧凑且可读的替代方案?

ruby predicate ternary-operator conditional-operator

6
推荐指数
2
解决办法
1584
查看次数

声明Func <in T,out Result>动态

考虑一下:

var propertyinfo = typeof(Customer).GetProperty(sortExpressionStr);
Type orderType = propertyinfo.PropertyType;
Run Code Online (Sandbox Code Playgroud)

现在我想宣布

Func<int,orderType>
Run Code Online (Sandbox Code Playgroud)

我知道它不可能直接ordertype在运行时,但有任何解决方法吗?

这正是我想要做的:

var propertyinfo = typeof(T).GetProperty(sortExpressionStr);
Type orderType = propertyinfo.PropertyType;

var param = Expression.Parameter(typeof(T), "x");
var sortExpression = (Expression.Lambda<Func<T, orderType>>
   (Expression.Convert(Expression.Property(param, sortExpressionStr), typeof(orderType)), param));
Run Code Online (Sandbox Code Playgroud)

这一切都是因为我想转换:

Expression<Func<T,object>> to Expression<Func<T,orderType>>
Run Code Online (Sandbox Code Playgroud)

或者如果它不可能那么我想从正确的类型的第一个地方创建它,案例如下:

我在一个方法中,它有一个type(Customer)和我想要通过它订购的类型的属性名称,我想创建一个排序表达式树来将它传递给Orderby(这里).

c# lambda predicate anonymous-methods expression-trees

6
推荐指数
3
解决办法
5405
查看次数

Expression.Call - 调用linq扩展名:FirstOrDefault,Where

我试图动态创建以下,但是我在调​​用扩展方法时遇到问题FirstOrDefault:

 using(var context = new Entities())
 {
     var list = context.Engines.Include("Cars").Select(e => e.Cars.FirstOrDefault()).ToList();
 }
Run Code Online (Sandbox Code Playgroud)

我有以下内容

Expression parameter = Expression.Parameter(typeof(Engine), "e");
Expression property = Expression.Property(parameter, "Cars");
Run Code Online (Sandbox Code Playgroud)
  • 参数= {e}
  • property = {e.Cars}

这些都很好,但是当我尝试调用FirstOrDefault方法时遇到问题:

var result = Expression.Call(typeof(Queryable), "FirstOrDefault", new type[] { typeof(Car)}, property);
Run Code Online (Sandbox Code Playgroud)

我想得到

  • 结果= {e.Cars.FirstOrDefault()}

但我得到了一个 InvalidOperationException

类型'System.Linq.Queryable'上没有通用方法'FirstOrDefault'与提供的类型参数和参数兼容.如果方法是非泛型的,则不应提供类型参数.

任何帮助将非常感激.

c# linq expression predicate dynamic

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

是否有用于将谓词定义为类似SQL的字符串的Java库?

Lambdaj(以及其他一些类似的库)提供了一个having函数,它允许我像这样定义谓词(例如直接来自lambdaj Features页面):

List<Person> oldFriends = 
    filter(having(on(Person.class).getAge(), greaterThan(30)), meAndMyFriends);
Run Code Online (Sandbox Code Playgroud)

我非常希望能够使用简单的字符串语法定义我的Java谓词对象"age > 30"- 类似于SQL where子句 - 所以上面的过滤器变成了类似的东西:

List<Person> oldFriends = 
    filter(having(Person.class, "age > 30"), meAndMyFriends);
Run Code Online (Sandbox Code Playgroud)

这样的库是否存在,或者是否有人可以为我自己构建一个查询解析部分推荐一些构建块?我实际上并不介意它创造了什么样的谓词(hamcrest,guava等).

在我的头脑中,我可以想到它支持的许多事情:平等和不平等,自定义和原始类型,和/或/不,括号,LIKE(对于字符串),in(...)enum的解释名称,属性的属性.

这是一个更复杂的谓词的例子:

"salesCount > 10 and (country='UK' or city='New York')
and attitude not in (MENACING, RUDE)
and product.name <> 'Widget' "
Run Code Online (Sandbox Code Playgroud)

(此示例假定谓词应用于的SalesPerson类(比如一个类)具有方法getSalesCount(),getCountry()和getCity(),以及getAttitude()(返回枚举).它还具有属性getProduct,返回带有getName方法的类型.

动机:我们有一个客户端 - 服务器系统,它有多种语言API(目前是Java和C#); 我正在寻找一种语言无关的方式让用户指定一个谓词,该谓词过滤一组对象,其中的确切内容只有服务器进程知道(用Java编写).

java sql predicate el lambdaj

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

结合+和PredredWithSubpredicates:和+ orPredicateWithSubpredicates:在一个谓词中

我想用下一个subpredicates设置复合谓词:

  • id(AND类型)
  • 名字(或类型)
  • 姓氏(或类型)
  • 中间名(或类型)

我读NSCompoundPredicate文档,但不理解不够清晰-这可能在所有使用都+ andPredicateWithSubpredicates:+ orPredicateWithSubpredicates:他们在一个组合成一个谓语获取请求?

predicate objective-c nspredicate nsfetchedresultscontroller

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

通用查询方法

尝试通过制作通用GET方法来减少代码中的重复.我正在使用OrmLite及其SQLExpressionVisitor更新...目标是传入lambda.我已经看过其他一些我希望会有所帮助的帖子,但到目前为止,没有去......显然问题是我如何在ev.Where声明中尝试评估标准,但解决方案正在逃避我. ..

提前谢谢...... -Lenny

public IQueryable<T> Get<T>(Predicate<T> criteria)
{
  using (IDbConnection db = dbConnectionFactory.OpenDbConnection())
    {
     SqlExpressionVisitor<T> ev = OrmLiteConfig.DialectProvider.ExpressionVisitor<T>();
     ev.Where(x => criteria.Invoke(x))
     return db.Select(ev).AsQueryable();
    }
 }
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误......从范围''引用的'TW.Api.Models.CostCenter'类型的变量'x',但它没有定义

这是一个有效但不通用的代码示例....

public IQueryable<CostCenter> Get(Identity user)
{
    using (IDbConnection db = dbConnectionFactory.OpenDbConnection())
      {
        SqlExpressionVisitor<CostCenter> ev = OrmLiteConfig.DialectProvider.ExpressionVisitor<CostCenter>();
        ev.Where(x => x.OrgId == user.OrgId);
        ev.Where(x => x.VisibilityStockpointId == user.StockpointId);``
        return db.Select(ev).AsQueryable();
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我上面引用的模型......

[Alias("CostCenterDetail")]
public class CostCenter
{
    public Guid Id { get; set; }
    public Guid StockpointId { get; set; }
    public virtual Guid? …
Run Code Online (Sandbox Code Playgroud)

c# generics predicate ormlite-servicestack

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

如何组合List <Predicate <MyClass >>中的所有谓词

我有一个问题,我相信你帮我解决了皱纹问题.

我有

List<Predicate<TaskFx>> predicates
Run Code Online (Sandbox Code Playgroud)

我想在这里使用这些谓词

taskFxList.stream().filter(predicates).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

作为一个谓词合并如下:

predicate1.and(predicate2).and...
Run Code Online (Sandbox Code Playgroud)

我有一个表(13列),其中包含一些结果(在JavaFx中)和6个字段,可以通过这些字段中的值在此表中搜索.我只能输入3个字段的值,所以我的

predicates.size() = 3;
Run Code Online (Sandbox Code Playgroud)

问题是如何最好地动态准备一个

Predicate<TaskFx> predicate
Run Code Online (Sandbox Code Playgroud)

包含由x.and(y).和(z)合并的所有谓词

非常感谢您的帮助!

java predicate java-8 java-stream

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

Java流:对链接使用可选的filter()操作

注意:这个问题是相关的java.util.Optional.

在处理流时,我经常使用这样的逻辑:

 Stream<FooBar> stream = myInitialStream();
 if (needsFilter1) stream = stream.filter(c -> whatever1());
 if (needsFilter2) stream = stream.filter(c -> whatever2());
 ...
 return stream.collect(toList());
Run Code Online (Sandbox Code Playgroud)

我想要实现的是使用链接将上面的代码转换为单个表达式.我发现这更具可读性和直接性.到目前为止,我发现实现这一目标的唯一方法是:

return myInitialStream()
       .filter(needsFilter1? c->whatever1() : c->true)
       .filter(needsFilter2? c->whatever2() : c->true)
       .collect(toList());
Run Code Online (Sandbox Code Playgroud)

尽管如此,这会对那些琐碎的c->truelamdas 进行不必要的调用,这可能会在扩展时产生一些性能成本.

所以我的问题是:是否有更好的方法来生成包含可选过滤的链式流表达式?

更新:也许我没有说清楚,但我的问题是找到单表达式解决方案.如果非要使用多个语句(初始化谓词,例如),我还可以用我的问题基本上不相同的第一个代码块.

java lambda predicate java-8 java-stream

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