在我的代码中,我有以下Linq查询:
IQueryable<Data> charts = (from report in ctx.Charts group report by new
{
Name = report.ChartTitle.ChartType.ChartCategory.CategoryName,
id = report.ChartTitle.ChartType.ChartCategory.ChartCategoryId,
Period = report.Period
} into d
select new Data
{
Name = d.Key.Name,
Id = d.Key.id,
Period = d.Key.Period,
Reports = from r in d group r by new
{ Title = r.ChartTitle.Name, id = r.ChartTitle.ChartTitleId } into rs
select new Report
{
Title = rs.Key.Title,
Id = rs.Key.id,
Charts = (from c in rs group c by new
{
ChartId = c.ChartId,
FiscalYear = c.FiscalYear,
ModifiedDate = c.ChartView.ModifiedDate,
Function = c.Function.DisplayName,
ChartData=c.ChartView.ViewData
} into cs
select new ChartInfo
{
ChartId = cs.Key.ChartId,
FiscalYear = cs.Key.FiscalYear,
ModifiedDate = cs.Key.ModifiedDate,
Function = cs.Key.Function,
ChartData=cs.Key.ChartData
})
}});
在上面的代码中,如果我排除“ChartData”字段(XML数据类型),则查询执行正常。但是当我包含此字段时,它会抛出以下错误:“xml数据类型不能被选为DISTINCT,因为它不具有可比性。”
让我知道我在这里缺少什么?
答案 0 :(得分:0)
您没有告诉我们ChartData的实际数据类型是什么,但是从您描述的错误看起来问题是,无论此数据类型是什么,它都不会实现IComparable
接口,这是必需的接口,如果您希望数据类型的实例具有可比性
答案 1 :(得分:0)
您无法按XML类型进行分组。这是SQL限制,而不是LINQ-to-SQL限制。 (请参阅Group by on XML column field with LINQ和select an xml type column in select query with group by SQL Server 2008)
您是否需要按XML列进行分组?另一种方法是按其他列分组,然后选择第一个XML值作为结果。
Charts = (from c in rs group c by new
{
ChartId = c.ChartId,
FiscalYear = c.FiscalYear,
ModifiedDate = c.ChartView.ModifiedDate,
Function = c.Function.DisplayName,
} into cs
select new ChartInfo
{
ChartId = cs.Key.ChartId,
FiscalYear = cs.Key.FiscalYear,
ModifiedDate = cs.Key.ModifiedDate,
Function = cs.Key.Function,
ChartData=cs.Value.FirstOrDefault().ChartData
})
使用LINQ-to-SQL时,仍然可以访问被分组的项目 - 您不需要像在SQL中那样在group by子句中包含每个'selected'属性/列。