代码之家  ›  专栏  ›  技术社区  ›  Andrew Queisser

按问题分组

  •  2
  • Andrew Queisser  · 技术社区  · 16 年前

    我今天开始玩Linq,遇到了一个我找不到答案的问题。我在查询一个简单的SQL Server数据库,其中有一些员工记录。其中一个字段是全名(cn)。我想在第一个空格处拆分全名,按名字分组会很有趣。我试过了

    group by person.cn.Split(separators)[0]
    

    然后我试着用名字的几个字母来分组:

    group by person.cn.Substring(0,5)
    

    这很好,但不是我想要的。

    • 为什么第一个例子看起来很接近第二个却不起作用?
    • 知道在幕后是SQL的东西在进行,有什么好方法可以有效地做这类事情

    谢谢,

    3 回复  |  直到 16 年前
        1
  •  2
  •   Amy B    16 年前

    Split没有到SQL的转换。

    string oneSpace = " ";
    string fiftySpace = "                                                  ";
    
    var query = 
      from person in db.Persons
      let lastname = person.cn.Replace(oneSpace, fiftySpace).SubString(0, 50).Trim()
      group person by lastname into g
      select new { Key = g.Key, Count = g.Count };
    
        2
  •  1
  •   Erik Forbes    16 年前

    第一次尝试失败的原因是linqtosql使用表达式树将查询转换为SQL。因此,任何不能直接翻译成SQL的代码都是例外——这包括对Split的调用。

        3
  •  1
  •   Andrew Queisser    16 年前

    谢谢,伙计们,我会试试“替换”的把戏看看它是否运行。我对LINQ非常感兴趣,但是现在看起来有一些隐藏的秘密,在有效使用LINQ之前,您必须知道LINQ查询转换成了什么。

    核心问题当然是我对SQL不是很了解,所以我将从这里开始。

    编辑:

    再次感谢,