Linq Where / OrderBy string to int

时间:2014-09-11 14:51:39

标签: c# .net linq nhibernate

我在这里看到过类似的问题,但没有一个答案适用于我的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)]

帮助!

3 个答案:

答案 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();