Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在fluent Nhibernate中是否有一种流畅的方法来执行条件查询?_C#_Nhibernate_Fluent Nhibernate - Fatal编程技术网

C# 在fluent Nhibernate中是否有一种流畅的方法来执行条件查询?

C# 在fluent Nhibernate中是否有一种流畅的方法来执行条件查询?,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,目前,我创建的标准如下: gameCriteria = Restrictions.Eq("Name", videoGameName); 我想知道fluent nhibernate是否添加了允许以下功能的功能: gameCriteria = Restrictions.Eq<VideoGame>(v => v.Name, videoGameName); gameCriteria=Restrictions.Eq(v=>v.Name,videoGameName); 简言之,我想去

目前,我创建的标准如下:

gameCriteria = Restrictions.Eq("Name", videoGameName);
我想知道fluent nhibernate是否添加了允许以下功能的功能:

gameCriteria = Restrictions.Eq<VideoGame>(v => v.Name, videoGameName);
gameCriteria=Restrictions.Eq(v=>v.Name,videoGameName);

简言之,我想去掉这根神奇的绳子。(我的实际查询往往涉及许多神奇的字符串,这些字符串会由于打字错误等而导致错误。)

刚刚在另一位开发人员编写的存储库中找到了答案

gameCriteria = Restrictions.Eq(Projections.Property<VideoGame>(v => v.Name), videoGameName);
gameCriteria=Restrictions.Eq(Projections.Property(v=>v.Name),videoGameName);

现在我觉得自己花了这么多时间来搜索这个东西很傻。

有一个内置的NHibernate类。它提供了以下方法:

/// <summary>
/// Build an ICriterion for the given property
/// </summary>
/// <param name="expression">lambda expression identifying property</param>
/// <returns>returns LambdaRestrictionBuilder</returns>
public static LambdaRestrictionBuilder On<T>(Expression<Func<T, object>> expression)
{
    ExpressionProcessor.ProjectionInfo projection = 
      ExpressionProcessor.FindMemberProjection(expression.Body);
    return new LambdaRestrictionBuilder(projection);
}
//
///为给定属性构建ICriterion
/// 
///lambda表达式标识属性
///返回LambdaRestrictionBuilder
上的公共静态LambdaRestrictionBuilder(表达式)
{
ExpressionProcessor.ProjectionInfo投影=
ExpressionProcessor.FindMemberProjection(expression.Body);
返回新的LambdaRestrictionBuilder(投影);
}
我们可以这样使用它:

// exact match
Restrictions.On<VideoGame>(v => v.Name == videoGameName);
//精确匹配
限制(v=>v.Name==videoGameName);

//将表达式类似为“videoGameName%”
限制.On(v=>v.Name).IsLike(videoGameName,MatchMode.Start);

Fluent NHibernate只处理映射,不处理查询。我找到了解决方案,但它可能只是核心NHibernate的一部分,与Fluent NHibernate没有什么特别的关系,这就是为什么我的搜索没有结果。你也可以使用QueryOver API或查询(LINQ)这和预测之间有显著的区别吗?我不认为这很重要。限制。On只是内置的;)最后,它将生成相同的SQL。。。重点是:内置的,应该是首选的。。。因为每一个新版本。。你可以相信。。。也许NH4会来;)。。。我只是想告诉你怎么。。。
// LIKE expression as 'videoGameName%'
Restrictions.On<VideoGame>(v => v.Name).IsLike(videoGameName, MatchMode.Start);