如果我在Internet中搜索NHibernate Criteria API查询示例,则会有使用限制的示例,而其他示例则使用Expression.这两者有什么不同?
例如:
posts = session.CreateCriteria<Post>()
.Add(Expression.Eq("Id", 1))
.List<Post>();
posts = session.CreateCriteria<Post>()
.Add(Restrictions.Eq("Id", 1))
.List<Post>();
Run Code Online (Sandbox Code Playgroud) 我在NHibernate中遇到了一个间歇性问题,它为实体生成一个查询,但用一个完全不同(和不相关)实体的列替换其中一个列.
它只替换单个列,通常通过重新启动应用程序来解决(尽管有时需要几次尝试).
对此的任何意见将非常感谢!
实体
public class LiquiditySourceItem : RunDataEntity, IEntity<int>
{
public virtual int Id { get; protected internal set; }
public virtual int IdentID { get; protected internal set; }
public virtual string Portfolio { get; protected internal set; }
public virtual string ProfitCentre { get; protected internal set; }
public virtual DateTime? MaturityDate { get; protected internal set; }
public virtual string Curr1 { get; protected internal set; }
public virtual string …Run Code Online (Sandbox Code Playgroud) 我正在尝试对整数列进行搜索,我需要做的是实际将列转换为varchar然后执行类似搜索.这可能吗?使用Criteria API最简单的方法是什么?
var search = "123";
criteria.Add(Restrictions.Like("Number", "%" + search + "%"))
Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何在NHibernate中进行最佳查询,以便返回结果介于今天时间> = PublishDateTime和<= ExpiryDateTime的条目之间
到期日可以为空,所以我需要允许.我在这里和这里找到了几个例子,但它们似乎以不同的方式工作并接受2个值并与一个DB字段进行比较.我真的想要别的方法.
查询到目前为止:
var query = _session.CreateCriteria<Message>()
.AddOrder(Order.Desc("PublishedDateTime"))
.List<Message>();
return query;
Run Code Online (Sandbox Code Playgroud)
任何建议都会受到极大的欢迎!
我是NHibernate的新手,我正在尝试学习如何查询我的数据.
下面是配置xml.仅显示配方.
我希望能够通过来自输入的关键字的recipetitle以及来自ingredientname的成分来查询食谱.
所以你可以输入"面食酒".
这是我尝试过但却给我一个错误.
hql = "from Recipe r " +
"left join r.Images " +
"inner join r.User " +
"inner join r.Ingredients i " +
"where i.IngredientName Like '%pasta%' OR i.IngredientName Like '%wine%' OR r.RecipeTitle Like '%pasta' OR r.RecipeTitle Like '%wine%'";
Run Code Online (Sandbox Code Playgroud)
我也想加载收藏品.
我要去查询吗?我需要能够根据我的搜索条件构建查询字符串.这在SQL中很容易形成.
马尔科姆
<class name="Recipe" table="Recipes" xmlns="urn:nhibernate-mapping-2.2">
<id name="RecipeID" type="Int32" column="RecipeID">
<generator class="identity" />
</id>
<property name="RecipeTitle" type="String">
<column name="RecipeTitle" />
</property>
<property name="Completed" type="Boolean">
<column name="Completed" />
</property>
<property name="ModifiedOn" type="DateTime">
<column name="ModifiedOn" />
</property> …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写QueryOver语句,以按降序时间顺序选择N行.
session.QueryOver<T>().Take(10).OrderBy(x=>x.DateInserted);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这根本不起作用.有什么方法可以解决它吗?
我重构旧式查询CreateCriteria()到QueryOver().我的Wcf服务获取string PropertyName订单查询结果.对于IQueryable我使用动态LINQ做这样的排序,为CreateCriteria()- AddOrder().
IList<object[]> result =
GetSession()
.QueryOver(() => activity)
.JoinAlias(() => activity.ActivityLicense, () => license)
.Select(Projections.ProjectionList()
.Add(Projections.Count<Activity>(e => e.Id), "ActivityCount")
.Add(Projections.Group(() => license.SerialNumber), "SerialNumber")
.Add(Projections.Count<Activity>(e => e.MacAdress), "MacAddressCount")
.Add(Projections.Count<Activity>(e => e.IpAdress), "IpAddressCount")
)
.OrderByAlias("ActivityCount") // Compilation Error - I need such extension method
.List<object[]>();
Run Code Online (Sandbox Code Playgroud)
有关字符串属性名称如何排序的任何建议?
PS:我无法使用LINQ到Nhibernate:LINQ to NHibernate - .GroupBy().Skip().Take()导致异常
谢谢!
我有域类位置
public abstract class BaseEntity<T> where T: struct
{
public virtual T Id { get; set; }
public virtual bool Equals(BaseEntity<T> other)
}
public class Location : BaseEntity<Int32>
{
public User User {get;set;}
}
public class User : BaseEntity<Int32>
{
public string Name {get;set;
}
public OtherInfo Otherinfo {get;set;};
}
public class OtherInfo
{
public string preference {get;set;};
}
var criteria = session.CreateCriteria(typeof(Location), "alias");
criteria.CreateCriteria("User", "user", JoinType.InnerJoin);
criteria.CreateCriteria("user.Otherinfo", "userInfo",JoinType.InnerJoin);
criteria.Add(Restrictions.Eq("user.Id", 100));
criteria.SetProjection(Projections.Alias(Projections.Id(), "Id"), Projections.Alias(Projections.Property("user.Name"), "Name"), Projections.Alias(Projections.Property("userInfo.preference "), "pref"));
Run Code Online (Sandbox Code Playgroud)
现在,当我执行上述条件时,它会在userInfo.preference上出错.{NHibernate.QueryException:无法解析属性:Otherinfo of:Location.User这里有什么错误.是因为多个嵌套对象
我目前的项目是使用NHibernate 3.0b1和NHibernate.Linq.Query<T>()API.我对LINQ非常流利,但我对HQL或ICriteria API没有任何经验.IQueryable API不支持我的一个查询,因此我认为我需要使用以前的API之一 - 但我不知道从哪里开始.
我已经尝试在网上搜索ICriteria的一个很好的"入门"指南,但我发现的唯一例子要么太简单了,要么在这里申请,要么太高级我无法理解.如果有人有一些好的学习材料可以传递,我们将不胜感激.
在任何情况下,我要查询的对象模型看起来像这样(大大简化,省略了非相关属性):
class Ticket {
IEnumerable<TicketAction> Actions { get; set; }
}
abstract class TicketAction {
Person TakenBy { get; set; }
DateTime Timestamp { get; set; }
}
class CreateAction : TicketAction {}
class Person {
string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
A Ticket有一个TicketAction描述其历史的集合.TicketAction亚型包括CreateAction,ReassignAction,CloseAction等所有的门票已经一CreateAction创建时添加到此集合.
此LINQ查询正在搜索具有给定名称的人创建的票证.
var createdByName = "john".ToUpper();
var tickets = _session.Query<Ticket>()
.Where(t => t.Actions
.OfType<CreateAction>() …Run Code Online (Sandbox Code Playgroud) 如何通过字符串属性的长度限制查询?例如。就像是:
NHSession.QueryOver<Customer>()
.Where(p => p.RegistryCode.Length == 8)
Run Code Online (Sandbox Code Playgroud)