Ошибка: «Тип данных xml нельзя выбрать как DISTINCT, потому что он несопоставим». - PullRequest
0 голосов
/ 18 сентября 2011

В моем коде у меня есть следующий запрос 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, потому что он несопоставим».

Дайте мне знать, что мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2011

Вы не можете группировать по типам XML. Это ограничение SQL, а не ограничение LINQ-to-SQL. (См. Группировать по полю столбца XML с LINQ и , выберите столбец типа xml в запросе выбора с группой по 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 сгруппированные элементы по-прежнему доступны - вам не нужно включать каждое «выбранное» свойство / столбец в предложение group by`, как в SQL.

0 голосов
/ 18 сентября 2011

Вы не сказали нам, каков фактический тип данных ChartData, но из описываемой вами ошибки похоже, что проблема в том, что независимо от того, что это за тип данных, он не реализует интерфейс IComparable, который является обязательным интерфейсом, есливы хотите, чтобы экземпляры типа данных были сопоставимы

...