将Linq分组为Sql与Linq对象

时间:2016-10-04 10:40:09

标签: c# sql-server linq tsql

我在SQL Server 2008中有一个表:

if($this->email->send())
{
    $data['emailstr'] = "email has been sent";
}
else
{
    $data['emailfail'] = "could not send the email.";
}

该表上的唯一索引:

CREATE TABLE [dbo].[Pages](
    [Id] [uniqueidentifier] NOT NULL,
    [PageName] varchar(400) NOT NULL,
    [Count] int NOT NULL,
CONSTRAINT [PK_Pages] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)) ON [PRIMARY]

我从一个文本文件中获取了一堆页面名称,我将其分组到Linq并计算出现次数。

CREATE UNIQUE NONCLUSTERED INDEX [IX_PageName] ON [dbo].[Pages]
(
    [PageName] ASC
)

我知道Linq中对象的分组与Ling不同,因为IEnumerable分组区分大小写,而T-SQL中的索引忽略varchar末尾的空格。这就是为什么我使用上面的var data = pages.GroupBy(x => x.PageName.ToLower().Trim()) .Select(x => new Page() { Id = Guid.NewGuid(), PageName = x.Key, Count = x.Count(), }) .ToList(); ToLower()进行分组,但索引异常仍然会触发。我在文本文件的页面名称中有很多非alpha carachters(正斜杠,反斜杠,逗号,点等),但我无法弄清楚哪些是导致异常的。

修改

这是调试时遇到的异常。

Trim()

SOLUTION:

感谢@Panagiotis Kanavos,我用Sql探查器解决了它。一些字符串在字符串的中间有亚洲字母,例如嘊和我的排序规则SQL_Latin1_General_CP1_CI_AS将它们存储为问号。仍然不确定这是一个重复的问题,因为它与尾随空白无关。

1 个答案:

答案 0 :(得分:-1)

在分组时,但在将数据插入表格时,您会收到错误。 请参阅此答案:Behavior of unique index, varchar column and (blank) spaces,您将看到无法将数据插入到具有唯一索引的列中,该列仅由尾随空格不同。