Linq 错误:";xml数据类型不能被选择为独立的,因为它是不可比较的;
在我的代码中,我有以下Linq查询:Linq 错误:";xml数据类型不能被选择为独立的,因为它是不可比较的;,linq,linq-to-sql,entity-framework-4,linq-to-entities,Linq,Linq To Sql,Entity Framework 4,Linq To Entities,在我的代码中,我有以下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,
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
})
}});
IQueryable图表=(来自ctx中的报告。图表组报告按新
{
名称=report.ChartTitle.ChartType.ChartCategory.CategoryName,
id=report.ChartTitle.ChartType.ChartCategory.ChartCategoryId,
期间=报告。期间
}进入d
选择新数据
{
Name=d.Key.Name,
Id=d.Key.Id,
句号=d.Key.Period,
报告=来自d组r中的r的新报告
{Title=r.ChartTitle.Name,id=r.ChartTitle.ChartTitleId}
选择新报告
{
Title=rs.Key.Title,
Id=rs.Key.Id,
图表=(根据新的
{
ChartId=c.ChartId,
财政部,
ModifiedDate=c.ChartView.ModifiedDate,
Function=c.Function.DisplayName,
ChartData=c.ChartView.ViewData
}进入cs
选择新建图表信息
{
ChartId=cs.Key.ChartId,
FiscalYear=cs.Key.FiscalYear,
ModifiedDate=cs.Key.ModifiedDate,
函数=cs.Key.Function,
ChartData=cs.Key.ChartData
})
}});
在上面的代码中,如果排除“ChartData”字段(它是XML数据类型),查询将正常执行。但是,当我包含此字段时,它抛出以下错误:“xml数据类型不能被选择为独立的,因为它不可比较。”
让我知道我在这里遗漏了什么?您没有告诉我们ChartData的实际数据类型,但是,从您描述的错误来看,问题似乎在于,无论此数据类型是什么,它都没有实现
IComparable
接口,如果您希望数据类型的实例具有可比性,则此接口是必需的您不能按XML类型分组。这是一个SQL限制,而不是LINQ到SQL检索。(见和)
是否需要按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”属性/列。您能再解释一下吗?ChartData在数据库表中为XML类型。我尝试使用IEqualityComparer,但出现以下错误消息。。。。LINQ to实体无法识别方法“System.Collections.Generic.IEnumerable
1[test.Model.ChartInfo]Distinct[ChartInfo](System.Collections.Generic.IEnumerable
1[test.Model.ChartInfo],System.Collections.Generic.IEqualityComparer`1[test.Model.ChartInfo]),这个方法不能翻译成商店表达式。嘿,柯克,谢谢你的回复。这个解决方案对我来说只做了一点小小的更改…我必须做以下更改:而不是:ChartData=cs.Value.FirstOrDefault().ChartData我使用了ChartData=cs.FirstOrDefault().ChartData,因为我没有找到属性“Value”。