Linq选择第n列= x列的行

时间:2015-02-26 14:48:37

标签: c# linq nhibernate

我有一个遗留数据库,我需要获取某种类型的所有行。没有要搜索的类型的列,但幸运的是,有一个命名约定,当我想要的类型时,每个第3个字符都有一个破折号。我以为我可以这么做:

var sectionsList = (from sec in db.Query<Section>()
                                     where (sec.Name[2] == '-')
                                     select sec).ToList().Distinct();

但是我收到了这个错误:

  

类型&#39; System.NotSupportedException&#39;的例外情况发生在   NHibernate.dll但未在用户代码中处理   信息:Char get_Chars(Int32)

我发现这看起来像是同一个问题: LINQ to Entities does not recognize the method Int32 get_Item(Int32) 但是这种情况涉及与可以事先抓住的本地值进行比较。我需要在搜索过程中迭代Name字符串。

1 个答案:

答案 0 :(得分:2)

我们应该使用Substring方法:

var sectionsList = 
  (
    from sec in db.Query<Section>()
    where sec.Name.Substring(2,1) == "-")
    select sec
  )
  .ToList().Distinct();

这应该转换为DB函数,如:substring(NAME, 2, 1) = '-'