gpt4 book ai didi

linq - 如何在NHibernate中查询动态属性?

转载 作者:行者123 更新时间:2023-12-02 00:29:59 26 4
gpt4 key购买 nike

我有这个问题。我有一堂这样的课:

public class WfStep
{
private readonly IDictionary properties = new Hashtable();

public virtual Guid Id { get; private set; }
public virtual string Name { get; set; }
public virtual dynamic Properties { get { return new HashtableDynamicObject(properties); } }

及其映射文件如下:

<class name="ConsoleApplication4.WfStep" table="WFSteps">

<id name="Id">
<generator class="guid"/>
</id>
<property name="Name" />

<map name="Properties" table="WFSteps_Properties" access="field.lowercase">
<key column="StepId" />
<index column="PropertyName" type="System.String"/>
<composite-element class="ConsoleApplication4.ValueItem, ConsoleApplication4">
<property name="Value" type="System.String"/>
<property name="ValueType" type="System.String"/>
</composite-element>
</map>

这个例子移植自: Ayende Support dynamic fields with NHibernate and .NET 4.0

然后我将一个对象保存到数据库,如下所示:即。

var step = new WfStep { Name = "John" };
var property = new ValueItem() { Value = DateTime.Now, ValueType = "System.DateTime" };
step.Properties["DateProperty"] = property ;

Session.Save(step);

现在我想返回所有将 DateProperty 设置为 2010 年的 WFStep,即:

var Session.Query<WfStep>().Where(x=>x.Properties.DateProperty.Year == 2010);

它抛出一个错误:

An expression tree may not contain a dynamic operation

如何查询具有动态属性的此类类型?

最佳答案

您可以对映射为 map 或列表的集合建立索引。尝试以下 hql

from WfStep s
where s.Properties["DateProperty"] = "2010"

关于linq - 如何在NHibernate中查询动态属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5553091/

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