gpt4 book ai didi

c# - 使用来自 Expression> 的信息创建运行时谓词

转载 作者:太空宇宙 更新时间:2023-11-03 13:13:11 25 4
gpt4 key购买 nike

假设如下代码

private readonly T entity;

public bool HasUnique<T>(Expression<Func<T, object>> property, IEnumerable<T> entities)
{
}

在哪里propertyT 的属性表达式实体。

如何检查entities中是否有元素具有与 entity 相同的属性值有,而属性是从给定的属性表达式中解析出来的?

现在,我可以从实体中获取属性名称及其值

问题似乎是如何在运行时设置和执行谓词?有点像

Func<T, bool> predicate = // build a predicate
var isUnique = !entities.Any(predicate);

用法是这样的

var isUnique = HasUnique<Person>(p => p.Name, people);

最佳答案

我试图弄清楚“独特”这个词与您所描述的内容有什么关系,您的示例用法不涉及任何实体来比较 people 的内容,但是我想你想要这样的东西?

public static bool HasUnique<T>(this T referenceItem, Func<T, object> property, 
IEnumerable<T> entities)
{
var referenceProperty = property(referenceItem);
return entities.Any(e => property(e) == referenceProperty);
}

或者可能是这样:

public static bool HasUnique<T>(this T referenceItem, Func<T, object> property, 
IEnumerable<T> entities)
{
var referenceProperty = property(referenceItem);
return entities.Any(e => property(e).Equals(referenceProperty));
}

甚至这样:

public static bool HasUnique<T, TProp>(this T referenceItem, Func<T, TProp> property, 
IEnumerable<T> entities)
{
var referenceProperty = property(referenceItem);
return entities.Any(e => property(e).Equals(referenceProperty));
}

关于c# - 使用来自 Expression<Func<T, object>> 的信息创建运行时谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27576209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com