LINQ按问题分组
时间:2020-03-06 14:49:05 来源:igfitidea点击:
我今天开始和Linq一起玩,遇到一个我找不到答案的问题。我正在查询具有一些员工记录的简单SQL Server数据库。字段之一是全名(cn)。我认为通过在第一个空格处拆分全名来对名字进行分组会很有趣。我试过了
group by person.cn.Split(separators)[0]
但是遇到了一个漫长的运行时异常(看起来很像C ++模板实例化错误)。
然后,我尝试按名字的几个字母进行分组:
group by person.cn.Substring(0,5)
效果很好,但不是我想要的。
我想知道两件事:
- 当第一个示例看上去与第二个示例如此接近时,为什么它不起作用?
- 知道在幕后发生的是SQL事情,这是有效执行此类操作的好方法
谢谢,
安德鲁
解决方案
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 };
第一次尝试不起作用的原因是因为LINQ to SQL使用表达式树将查询转换为SQL。因此,任何不能直接翻译成SQL的代码都是一个例外,其中包括对Split的调用。
谢谢大家,我将尝试"替换"把戏,看看它是否可以运行。我对LINQ很感兴趣,但是现在看来有些隐秘的神秘之处,我们必须先知道LINQ查询将转换为什么内容,然后才能有效地使用它。
核心问题当然是我不太了解SQL,因此我将从这里开始。
编辑:
我终于在今天尝试了"替换",并且可以正常运行。我什至必须按计数对分组结果进行排序,所以现在我的公司中有一个与之相似的名字。但是,这太慢了。选择所有内容并直接在C中执行存储操作要快得多。
再次感谢,
安德鲁