我在这里看到过类似的问题,但没有一个答案适用于我的linq查询。
我正在尝试将字符串转换为.ThenBy()
dbResults = gaResultDetails.All
.Where(c => c.ContentLink.Id == contentId && c.RequestType.Id == requestTypeId)
.OrderBy(c => c.DateFrom)
.ThenBy(c => int.Parse(c.Data_2)).Take(Take).ToList();
请注意我使用nHibernate进行数据访问,并且使用上面的表达式会出现以下错误:
[NotSupportedException: Int32 Parse(System.String)]
帮助!
答案 0 :(得分:2)
nhibernate linq表达式构建器不支持某些函数,请尝试:
dbResults = gaResultDetails.All
.Where(c => c.ContentLink.Id == contentId && c.RequestType.Id == requestTypeId)
.AsEnumerable()
.OrderBy(c => c.DateFrom)
.ThenBy(c => int.Parse(c.Data_2))
.Take(Take)
.ToList();
可能不是理想的表现,但应该达到你所需要的。
答案 1 :(得分:0)
这只是在黑暗中拍摄的。如果解析在ThenBy中不起作用,它可能不会在let
中获胜,但它值得一试。在LINQ语法中,因为我更喜欢它:
dbResults = (from c in gaResultDetails.All
where c.ContentLink.Id == contentId
&& c.RequestType.Id == requestTypeId
let nData2 = int.Parse(c.Data_2)
orderby c.DateFrom, nData2)
.Take(Take)
.ToList();
答案 2 :(得分:-1)
看起来你的ORM试图在SQL服务器端执行转换。 尝试在投射前评估数据,例如:
dbResults = gaResultDetails.All
.Where(c => c.ContentLink.Id == contentId && c.RequestType.Id == requestTypeId)
.OrderBy(c => c.DateFrom).ToList()
.ThenBy(c => int.Parse(c.Data_2)).Take(Take).ToList();