我的問題開始試圖找到一個區分大小寫的比較來使用NHibernate。在NHibernate中檢查大小寫。任何在NHibernate中
public List<MessageLog> GetLogsByFileAndEventName (string fileName, string eventName, DateTime? after,
DateTime? before)
{
var query = m_session.QueryOver<Log>()
.Where (x => x.CreatedOn >= after && x.CreatedOn <= before);
if (fileName != null)
(2) query = query.Where (x => x.FileName.Equals (fileName));
if (eventName != null)
(3) query = query.Where (x => x.LogRecords.Any (y => y.Event.Name.Equals (eventName)));
return query.List<Log>().ToList();
}
我現在已經替換線路2與
query = query.Where (Expression.Sql (" FileName = ? COLLATE Latin1_General_CS_AS", fileName, NHibernateUtil.String));
這產生了區分大小寫的比較。我在比較事件名稱(第3行)時嘗試使用類似的行爲,但是這會導致與參數不匹配。
編輯:我已經試過
query = query.Where (x => x.Records.Any(Expression.Sql (" SomeEvent.Name = ? COLLATE Latin1_General_CS_AS", eventName, NHibernateUtil.String)));
這導致"Argument type 'Nhibernate.Criterion.AbstractCriterion' is not assignable to parameter type 'System.Func<projectname.Dir.Nhibernate.Logs.LogRecord, bool>'
我試過一對夫婦使用LINQ其他方式(我是相當新的話)不產生結果,我想在案件比較之前。
我的問題:
什麼會在3線檢查大小寫事件名稱的最好方法?
你的第三個linq例子看起來不對。你對'.Where(...)!= null'的期望是什麼?在語義上,它應該總是成真。我想它應該是'.Any(...)'而不是。 –
你可以包括你已經嘗試過的第3行嗎?就像'query.Where(x => x.Records.Any(Expression.Sql(「SomeEvent.Name =?COLLATE Latin1_General_CS_AS」,eventName,NHibernateUtil.String)));'? –
感謝您的回覆!當我複製第3行時,我無意中複製了一直使用Expression.Sql而不是原始.Any()進行嘗試的表達式之一。 – Speerian