gpt4 book ai didi

c# - 在简单类型的集合上创建条件

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

如何使用 CreateCriteria 查询简单类型的集合?

比如我有1个类(class)

public class Test
{
public virtual Guid Id { get; set; }

private ICollection<int> _values = new HashedSet<int>();
public virtual ICollection<int> Values
{
get { return _values; }
}
}

还有 2 个表来支持它:

  • 仅使用 1 列进行测试:Id
  • 具有 2 列的值:TestId 和 Value

我的目标是使用 CreateCriteria 重写以下查询:

select * from test t
inner join values v on v.TestId = t.Id
where v.Value = 10

我试过这个:

Session.CreateCriteria<Test>("test")
.CreateAlias("test.Values", "values")
.Add(Restrictions.Eq("values", 10))
.List();

就像我会用一组对象来完成它,但显然失败了。加入是正确的,但如何添加限制?

最佳答案

尽管有这个问题,我还是建议使用 IList<ValueEntity>而不是 IList<int> .

嗯,只有当包含值 ([dbo].[values]) 的表可以有自己的替代 ID 列时,这才会起作用。 IE。这些列:ID , TestId , Value我们可以引入新实体 ValueEntity 并将其映射为一级公民。然后查询它会变得更加简单,包括子查询..

但我知道这不是这里的问题。

事实上,有一个解决方案,上面的问题有答案。但是,请至少尝试考虑上述建议...

NHibernate 解决方案IList<int>集合查询是:

Session.CreateCriteria<Test>("test")
.CreateAlias("test.Values", "values")
// we add magic keyword ".elements" here
.Add(Restrictions.Eq("values.elements", 10))
.List();

请参阅“.elements”,它的记录有点不正确 here .还提供了这个类似问题的答案:NHibernate How do I query against an IList<string> property?

关于c# - 在简单类型的集合上创建条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26750751/

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