标签: predicate

谓词序列化

假设我有一些 .NET 代码......

public class EventEnvelope
{
  public Dictionary<string, string> Headers { get; set; }
  public byte[] Body { get; set; }
}

public class EventSelector
{
  public Predicate<Dictionary<string, string>> Selector { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在我想将此事件选择器发送到一个不是用 .NET 编写的事件代理。

我如何以跨平台的方式序列化这个谓词,以便用另一种语言编写的程序可以重建谓词并执行它?

我曾想过尝试编写一个序列化程序,它将谓词写出一些 javascript,然后让 rhino 或 jint 解释并在代理处执行它。

或者也许有一种实际的跨平台方式来表示我不知道的谓词?

你怎么认为?

.net serialization predicate jint

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

C# 在彼此之间转换谓词

我正在开发多层应用程序解决方案,我的解决方案如下所示

  • 业务.域对象
  • Business.Process(*实际业务层)
  • 数据映射器
  • 数据存储库
  • Data.Sql.Entity(* 具有 .dbml 文件的实际数据层)

我的Business.Process项目(业务层)只知道Business.DomainObjectData.Repository项目,因此不知道并且与 Data.Sql.Entity 项目没有关系
我将业务(域)对象发送到存储库并执行在这个项目内部进行映射,然后我在存储库层内使用关系数据层进行 CRUD 过程。

我的传统领域对象是这样的,它只有属性

public class UserBO
{
public string Email { get; set; }
public string Username { get; set; }
public string Password { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的业务层类是这样的,

Repository r = new UserRepository();
r.Insert(myUserDomainObject);
Run Code Online (Sandbox Code Playgroud)


一切都很好,但是我的“谓词”查询有一些问题。我的存储库接口中有一个方法

bool IsExists(Expression<Func<BusinessObject,bool>> predicate);
Run Code Online (Sandbox Code Playgroud)

并像这样在我的业务层中使用它;

Repository r = new UserRepository(); <br/>
r.IsExists(p => p.Email.Equals("email address"));
Run Code Online (Sandbox Code Playgroud)

如您所见,它的参数是“业务对象”,但我的实际存储库(与数据库连接)使用我的 dbml 文件内的“数据对象”。

    public override bool IsExists(Expression<Func<DataObject, bool>> predicate){
return …
Run Code Online (Sandbox Code Playgroud)

c# linq predicate linq-to-sql

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

如何在谓词调用中测试与FakeItEasy的匹配?

我的代码中有以下调用:

var dbResults = new List<CrossReferenceRelationshipEF>();
dbResults = dateTimeFilter == null
    ? new List<CrossReferenceRelationshipEF>(
        CrossReferenceRelationshipRepository.GetAll()
                .ToList().OrderBy(crr => crr.ToPartner))
    : new List<CrossReferenceRelationshipEF>(
        CrossReferenceRelationshipRepository.SearchFor(
            crr => crr.HistoricEntries
                .Any(he => he.ModifiedDatetime > dateTimeFilter))
                .ToList().OrderBy(crr => crr.ToPartner));
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用FakeItEasy来验证当dateTimeFilter有一个值时,SearchFor(…)正在我的存储库中使用正确的函数调用它.

所以我的测试看起来像这样:

A.CallTo(() => crossReferenceRelationshipRepositoryMock.SearchFor(A<Expression<Func<CrossReferenceRelationshipEF,bool>>>.That
    .Matches(exp => Expression.Lambda<Func<DateTime>>(((BinaryExpression)exp.Body).Right).Compile().Invoke() == filterByDate)))
    .MustHaveHappened(Repeated.Exactly.Once);
Run Code Online (Sandbox Code Playgroud)

哪个不对.什么是测试我是否SearchFor(…)使用正确表达式调用的方法?

crr => crr.HistoricEntries.Any(he => he.ModifiedDatetime > dateTimeFilter)
Run Code Online (Sandbox Code Playgroud)

传入的实际值SearchFor(…)DateTime.MinValue因此我将断言更改为:

A.CallTo(() => crossReferenceRelationshipRepositoryMock.SearchFor(A<Expression<Func<CrossReferenceRelationshipEF, bool>>>.That
    .Matches(exp => Expression.Lambda<Func<DateTime>>(((BinaryExpression)exp.Body).Right).Compile().Invoke() == DateTime.MinValue)))
    .MustHaveHappened(Repeated.Exactly.Once);
Run Code Online (Sandbox Code Playgroud)

这是失败的,我得到的例外是

System.InvalidCastException:
  Unable to cast object of …
Run Code Online (Sandbox Code Playgroud)

c# lambda predicate fakeiteasy

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

使用 QueryDsl 谓词和 spring jpa 通过降序从结果集中获取第一行

我是 spring JPA 的新手。我有一个查询,因此我必须获取结果集并仅获取顶部的行。我不知道如何在 spring JPA 中执行此操作。而且我不希望使用 @Query 注释来完成,因为我被问到不要在代码中进行任何查询。这是我想要转换的

我的查询

SELECT id,name FROM example_table ORDER BY id DESC LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

我在谓词文件中尝试了这样的事情:

public Predicate getLatest(){
 QExampleTable example = QExampleTable.exampleTable;
 return (Predicate) example.id.desc();     
}
Run Code Online (Sandbox Code Playgroud)

这就是我的 jpa 存储库的样子:

public ExampleTable findOne(MyPredicate.getLatest());
Run Code Online (Sandbox Code Playgroud)

但这行不通,我知道它不会清楚。但我真的不知道如何转换上面的查询。谁能帮我解决这个问题

spring predicate querydsl web spring-data-jpa

5
推荐指数
2
解决办法
5899
查看次数

什么是归纳谓词?

你如何解释归纳谓词?它们是做什么用的?他们背后的理论是什么?它们仅存在于依赖类型系统中,还是也存在于其他系统中?它们在某种程度上与 GADT 相关吗?为什么它们在 Coq 中默认为 true?

这是 Coq 的一个例子:

Inductive even : nat -> Prop :=
| even0 : even 0
| evens : forall p:nat, even p -> even (S (S P))
Run Code Online (Sandbox Code Playgroud)

你会如何使用这个定义?它是数据类型还是命题?

predicate coq induction

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

java.util.function.Predicate#and 和 Groovy 2.2 闭包

我有这个运行良好的 Java 8 代码:

//Java 8
@Test public void testPredicates(){
    Predicate<Integer> p1 =  (i) -> true;
    Predicate<Integer> p2 =  (i) -> true;
    Predicate<Integer> p3 =  p1.and(p2);
    List<Integer> is = new ArrayList<>();
    is.add(1);
    is.add(2);
    assertTrue(is.stream().allMatch(p1.and(p2)));
}
Run Code Online (Sandbox Code Playgroud)

我在 Groovy (2.2) 中最接近它的是:

//Groovy 2.2
@Test
void test(){
    Predicate<Integer> p1 = { i -> true}
    Predicate<Integer> p2 = {i -> true}
    Predicate<Integer> p3 = p2.and(p1)
    List<Integer> is = new ArrayList<>()
    is.add(1)
    is.add(2)
    assert(is.stream().allMatch(p1.and(p2)))
}
Run Code Online (Sandbox Code Playgroud)

Groovy 代码在调用该and方法的行上失败并显示以下内容:

java.lang.ClassCastException: java.lang.Boolean 
    cannot be cast to …
Run Code Online (Sandbox Code Playgroud)

groovy predicate java-8

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

jpa findAll 上的 NPE 以及规范/谓词

我有以下规范,应该检查 a 是否Magazines在a 下File的列表中:MagazinesSubscription

public static Specification<File> getContainingMagazines(final long subscriptionId){
    return new Specification<File>() {
        @Override
        public Predicate toPredicate(Root<File> root, CriteriaQuery<?> query, CriteriaBuilder cb) {

        Subquery<Subscription> subscriptionSubquery = query.subquery(Subscription.class);
        Root<Subscription> subscriptionRoot = subscriptionSubquery.from(Subscription.class);
        ListJoin<Subscription, Magazine> subscriptionMagazineJoin = subscriptionRoot.join(Subscription_.magazines);

        Path<Long> subscriptionIdPath = subscriptionRoot.get(Subscription_.id);

        subscriptionSubquery.
                select(subscriptionRoot).
                where(cb.equal(subscriptionIdPath, subscriptionId));

        ListJoin<File, Magazine> magazinesJoin = root.join(File_.magazines);

        return cb.and(magazinesJoin.get(Magazine_.id).in(subscriptionMagazineJoin.get(Magazine_.id)));
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

在我的服务中,我正在这样做:

public int findFilesWithSubscription(long subscriptionId) {
        List<File> fileList = fileRepository.findAll(FileSpecs.getContainingMagazines(subscriptionId));
        return fileList.size();
    }
Run Code Online (Sandbox Code Playgroud)

涉及的实体如下:

@Entity
@Table(name = "nim_file")
public …
Run Code Online (Sandbox Code Playgroud)

java hibernate specifications jpa predicate

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

Python 谓词函数命名约定

Python 是否对谓词函数的名称有一些约定?例如,谓词函数名称以pfor Common Lisp 或?Scheme结尾。有时使用像is_or has_, ...这样的前缀,但在某些情况下它们可能不合适(它们可能很长才有意义,并且不必很明显函数是乍一看的谓词)。

python predicate

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

CoreData Predicate 获取包含数组中任何单词的每个句子

在 Swift 4 中,我有一个 CoreData“Sentence”模型,它有一个字符串属性“englishsentence”。我还有一个“单词”数组,并希望获取“englishsentence”属性包含数组中一个或多个单词的所有句子。

var words = ["today", "yesterday", "tomorrow"]
Run Code Online (Sandbox Code Playgroud)

这个数组只是一个例子。它应该在运行时改变并且可以有任何长度。

在 fetch 请求中,我试图做这样的事情:

let fetchRequest =
    NSFetchRequest<NSManagedObject>(entityName: "Sentence")
let predicate = NSPredicate(format: "ANY englishsentence CONTAINS ANY word IN %@", words)
    fetchRequest.predicate = predicate
Run Code Online (Sandbox Code Playgroud)

我能够为包含一个特定单词的所有句子创建一个谓词。但是,我无法让它与单词数组一起工作,除非我遍历单词数组并为每个单词发出新的获取请求。但这似乎非常低效。

predicate core-data nsfetchrequest swift

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

通用“为空”谓词

我写了这个通用谓词:

private static <T> Predicate<T> isNull(){
    return Objects::isNull;
}
Run Code Online (Sandbox Code Playgroud)

但是我不能将它与其他这样的谓词结合使用:

private static Predicate<String> isEmpty(){
    return string -> string.isEmpty();
}
Run Code Online (Sandbox Code Playgroud)

因为这个片段不会编译(期望 Predicate<String> in or operation):

isNull().or(isEmpty())
Run Code Online (Sandbox Code Playgroud)

有什么想法可以解决吗?谢谢!

java generics predicate java-8

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