标签: predicate

C#,Linq2SQL:创建谓词以查找多个范围内的元素

假设我的数据库中有一个名为Stuff的东西,名为Id.从用户那里我得到一系列选定的Range对象(或者我是从输入中创建它们)和他们想要的ID.该结构的精简版本如下所示:

public struct Range<T> : IEquatable<Range<T>>, IEqualityComparer<Range<T>>
{
    public T A;
    public T B;
    public Range(T a, T b)
    {
        A = a;
        B = b;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

所以有人可以得到:

var selectedRange = new List<Range<int>>
    {
        new Range(1, 4),
        new Range(7,11),
    };
Run Code Online (Sandbox Code Playgroud)

然后我想用它来创建一个谓词,只选择那些之间具有值的东西.例如,使用PredicateBuilder,我可以这样做:

var predicate = PredicateBuilder.False<Stuff>();
foreach (Range<int> r in selectedRange)
{
    int a = r.A;
    int b = r.B;
    predicate = predicate.Or(ø => ø.Id >= a && ø.Id <= b);
}
Run Code Online (Sandbox Code Playgroud)

然后:

var stuff = datacontext.Stuffs.Where(predicate).ToList(); …
Run Code Online (Sandbox Code Playgroud)

c# generics extension-methods predicate linq-to-sql

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

Java 1.5是否与.Net中的Predicate <T>方法等效?

具体来说,我正在寻找类似干净的符号Collection<T>.TrueForAll/ Exists等.

编写一个foreach循环来检查每个对象上方法的返回感觉很臭,所以我希望有一个更好的Java习语.

.net java collections predicate

8
推荐指数
2
解决办法
4054
查看次数

如何将谓词定义为函数参数

我希望能够写出一些东西

void Start(some condition that might evaluate to either true or false) {
    //function will only really start if the predicate evaluates to true
}
Run Code Online (Sandbox Code Playgroud)

我猜它必须是这样的形式:

void Start(Predicate predicate) {
}
Run Code Online (Sandbox Code Playgroud)

每当谓词评估为true或false时,如何检查Start函数内部?我对谓词的使用是否正确?

谢谢

.net c# predicate

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

使用聚合操作崩溃:Core Data iOS应用程序中的"ALL"

我正在开发一个iphone应用程序,我与Group和Contact对象建立了一个简单的多对多关系.一个组可以有多个联系人,联系人可以属于多个组.

我正在尝试使用以下谓词选择特定联系人不属于的所有组.(注意:uid字段是我用来唯一标识联系人实体的字符串字段)

[NSPredicate predicateWithFormat:@"ALL contacts.uid != %@", contactUId]
Run Code Online (Sandbox Code Playgroud)

根据Apple的谓词编程指南,ALL聚合操作是有效的,但是我得到以下异常,表明这是一个不受支持的谓词:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unsupported predicate (null)'
Run Code Online (Sandbox Code Playgroud)

我可以使用类似的谓词来使用此谓词选择联系人已经属于的所有组,因此看起来我已正确定义了所有关系和字段.

[NSPredicate predicateWithFormat:@"ANY contacts.uid == %@", contactUId]
Run Code Online (Sandbox Code Playgroud)

在构造谓词时抛出异常,而不是在我尝试实际执行获取请求时抛出异常,因此它似乎与我使用的语法相关,而不是与Core Data支持相关.我究竟做错了什么?

iphone predicate core-data nspredicate ios

8
推荐指数
2
解决办法
2951
查看次数

为什么我不能用谓词的实例化构造std :: set,但我可以指定一个构造的std :: set吗?

所以我有一个数组(0 - n),保存我希望std :: set用于它的排序的值.数组是unsigned int cost [n].

我正在使用以下仿函数进行此排序:

struct ProxySorter {
  ProxySorter(const unsigned* arr) : proxy_array(arr) {}
  bool operator()(const unsigned& a, const unsigned& b) const {
    return proxy_array[a] < proxy_array[b];
  }
  const unsigned* proxy_array;
};
Run Code Online (Sandbox Code Playgroud)

所以这就是问题......当我构建集合时,这是合法的:

std::set<unsigned, ProxySorter> node_queue = std::set<unsigned, ProxySorter>(ProxySorter(cost));
Run Code Online (Sandbox Code Playgroud)

我没有错误,一切都按预期工作.但这似乎是黑客和草率.

但是,这显然是非法的:

std::set<unsigned, ProxySorter> node_queue(ProxySorter(cost));
Run Code Online (Sandbox Code Playgroud)

试图用ProxySorter(成本)构造它会导致一堆错误,为每个set成员调用说这样的东西:

错误:在node_queue中请求成员擦除,这是非类型类型std :: set <unsigned int,ProxySorter>(ProxySorter)

常规施工有什么问题?为什么作业有效?我错过了什么区别?任何帮助非常感谢,谢谢.

哦,抱歉问题的标题,我不知道该怎么称呼它.

c++ constructor stl predicate set

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

在Core Data Predicate中使用元素名称的变量

我试图编写一个方法,尝试使用变量(作为NSXMLParser的一部分)基于谓词检索对象.代码如下所示:

我在类中定义了这些变量:

@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;

@property (strong, nonatomic) NSString *model;
@property (strong, nonatomic) NSString *element;
Run Code Online (Sandbox Code Playgroud)

现在在方法中,我设置了这样的请求:

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:self.model inManagedObjectContext:self.managedObjectContext];
[request setEntity:entity];
Run Code Online (Sandbox Code Playgroud)

现在面临的挑战 - 我希望能够做到的是:

// DOES NOT WORK
[request setPredicate:[NSPredicate predicateWithFormat:@"%@ == %@", self.element,string]];
Run Code Online (Sandbox Code Playgroud)

但这并没有带来任何结果.经过一番捣乱,我注意到这确实有效:

 if ( [self.element isEqualToString:@"name"] ) {
     [request setPredicate:[NSPredicate predicateWithFormat:@"name == %@", string]];
 }
Run Code Online (Sandbox Code Playgroud)

这告诉我,我self.element的设置是正确的(我认为?)但是谓词不喜欢表达式的左侧是变量.

我也尝试过:

[request setPredicate:[NSPredicate predicateWithFormat:@"%s == %@", [self.element UTF8String],string]];
Run Code Online (Sandbox Code Playgroud)

...只是为了看看它是否更喜欢一个字符串.我也无法做到这一点.

我正在尝试甚至可能吗?我已经尽可能多地阅读了Core Data文档,我找不到任何以这种方式执行的示例代码,但我也没有发现任何可以说它不可能的内容.

编辑:现在工作代码:

[request setPredicate:[NSPredicate …
Run Code Online (Sandbox Code Playgroud)

predicate core-data ios

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

什么是纯粹的功能?

我找到了这个引用:

  1. 预测纯函数.

谓词纯度:谓词是一个函数对象,它返回是/否答案,通常作为bool值.如果函数的结果仅依赖于它的参数,那么函数在数学意义上是纯粹的(请注意,这种"纯"的使用与纯虚函数无关).

不允许谓词保持或访问影响其运算符()结果的状态,包括成员和全局状态.更喜欢使operator()成为谓词的const成员函数(参见条款15).

什么是本声明中提到的纯函数,有人可以提供示例吗?提前致谢.

c++ predicate function

8
推荐指数
2
解决办法
408
查看次数

如何使用Dqper与Linq

我正在尝试从实体框架转换为Dapper,以期提高数据访问性能.

我使用的查询是谓词形式,如"Expression>".

举个例子:

我有以下代码,我需要转换为使用Dapper.

我目前在做什么:

public async Task<List<TModel>> Get(Expression<Func<TModel, bool>> query)
{
    // this.Context is of type DbContext
    return await this.Context.Set<TModel>().Where(query).ToListAsync();
}
Run Code Online (Sandbox Code Playgroud)

我想做什么:

public async Task<List<TModel>> Get(Expression<Func<TModel, bool>> query)
{
    using (IDbConnection cn = this.GetConnection)
    {
        return await cn.QueryAsync<TModel>(query);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的google-fu让我失望,有人可以帮忙.

编辑:

请注意,我找到了:https: //github.com/ryanwatson/Dapper.Extensions.Linq

但我似乎无法弄清楚如何使用它.

c# linq expression predicate dapper

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

Java11中的谓词过滤所有元素

我正在使用Java11.学习一种新的方法Predicate.not,我发现我目前的代码只找到猫科:

List<String> animals = List.of("cat", "leopard", "dog", "lion", "horse");
Predicate<String> cats = a -> !a.equals("dog") && !a.equals("horse");
Set<String> filterCat = animals.stream().filter(cats).collect(Collectors.toSet());
System.out.println(filterCat);
Run Code Online (Sandbox Code Playgroud)

输出是:

豹,猫,狮子

现在我正在尝试使用新方法,输出结果不正确.我该如何纠正?我做错了什么?

我后来的代码:

Predicate<String> updatedCatFilter = Predicate.not(a -> a.equals("dog") && a.equals("horse"));
Set<String> catFamily = animals.stream().filter(updatedCatFilter).collect(Collectors.toSet());
System.out.println(filterCat);
Run Code Online (Sandbox Code Playgroud)

但是现在输出我的所有列表.

马,豹,猫,狗,狮子

java predicate functional-interface java-11

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

Java - 将谓词转换为字符串

我想知道是否有任何方法可以转换PredicateString.例如,将有一个功能:

public static <T> String convertPredicate(Predicate<T> objPredicate) {
    return ?...
}
Run Code Online (Sandbox Code Playgroud)

以便以下调用将返回(obj) -> obj.value== 1:

convertPredicate((obj) -> obj.value== 1) 
Run Code Online (Sandbox Code Playgroud)

java string lambda predicate

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