gpt4 book ai didi

c# - 具有用于查询的逻辑的 Entity Framework 4.1 属性

转载 作者:行者123 更新时间:2023-11-30 13:04:40 27 4
gpt4 key购买 nike

问题是这样的,我在实体中有一个属性:

    public bool Expired
{
get { return CreationDate.AddDays(30) < DateTime.UtcNow; }
}

当然我不能在 Entity Framework 查询中使用它,尽管它不包含任何 EF 无法处理的东西,只是它甚至不尝试。

问题是,是否有可能以某种方式将此类迷你查询作为属性保留在实体中(例如使用 Func<T, bool> )以重用以形成更复杂的查询,例如

Products.Where(x.Expired || x.Price > something)

更新:哦,在发布问题后,我在 google 上又尝试了几个查询,发现了这个:

http://damieng.com/blog/2009/06/24/client-side-properties-and-any-remote-linq-provider

它需要一些额外的代码,所以我使用提到的库为我的属性编写了 CompiledExpression:

 private static readonly CompiledExpression<GuaranteeTransaction, bool> ShouldBeExpiredExpression =
DefaultTranslationOf<GuaranteeTransaction>
.Property(x => x.ShouldBeExpired)
.Is(x => x.CreationDate < DateTime.UtcNow.AddDays(-30));

事实证明, Entity Framework 也不支持 AddDays。我想我可以创建另一个 CompiledExpression 来使用相同的机制将 DateTime.UtcNow.AddDays(-30) 替换为属性,但这将是荒谬的(就可读性和复杂性而言)。

最佳答案

只要我没有收到任何更好的答案,我就会保持简单:将可重用的表达式移动到存储库。它可能看起来不太干净,也可能不在最佳位置,但他们正在做他们的工作,没有带来额外的复杂性,所以我想这是一个非常好的解决方案。

关于c# - 具有用于查询的逻辑的 Entity Framework 4.1 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7978124/

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