AdomdCommand cmd = new AdomdCommand(commandText, conn);
CellSet cs = cmd.ExecuteCellSet();
var result = from a in cs
select new
{...};
是否可以使用LINQ从CellSet读取?我尝试过使用DataTable而不是CellSet但速度要慢得多(例如:我接受了一个查询,使用DataTable需要大约45秒来执行,但是使用CellSet需要大约5秒)。
尝试使用LINQ时出现的错误:
无法找到源类型的查询模式的实现 'Microsoft.AnalysisServices.AdomdClient.CellSet'。 “选择”未找到。
更新:
我已经尝试过Enrico的建议,到目前为止它没有返回任何错误。下一个问题是如何从单元格中读取值。这是我到目前为止所尝试的内容:
var result = from cell in cs.Cells.Cast<Cell>()
select new searchResultsPolicy
{
PolicyNumber = ...
InsuredName = cell.Field<string>("[Insured].[DBA Name].[DBA Name].[MEMBER_CAPTION]"),
Agency = cell.Field<string>("[Agency].[Agency Name].[Agency Name].[MEMBER_CAPTION]"),
Market = cell.Field<string>("[Market].[Market Name].[Market Name].[MEMBER_CAPTION]"),
Revenue = String.Format("{0:#,##0}", cell.Field<double?>("[Measures].[Revenue]") ?? 0),
Premium = String.Format("{0:#,##0}", cell.Field<double?>("[Measures].[Premium]") ?? 0)
};
答案 0 :(得分:2)
您收到该错误的原因是CellSet类本身没有实现IEnumerable<T>,这是LINQ所必需的。
尝试通过CellSet.Cells属性执行LINQ查询。这将返回CellCollection对象,该对象实现IEnumerable。从那里,您可以使用IEnumerable<T>方法轻松将其转换为Enumerable.Cast<T>。
AdomdCommand cmd = new AdomdCommand(commandText, conn);
CellSet cs = cmd.ExecuteCellSet();
var result = from cell in cs.Cells.Cast<Cell>()
select new
{ ... };
另见: