C# linq2sql:使用ExceuteQuery<;dto>;当返回的行不在我的dto中时?我可以使用泛型数据类型吗?

C# linq2sql:使用ExceuteQuery<;dto>;当返回的行不在我的dto中时?我可以使用泛型数据类型吗?,c#,linq-to-sql,stored-procedures,executequery,C#,Linq To Sql,Stored Procedures,Executequery,使用ExecuteQuery取得了一些成功,即AccessRights是我的dto,queryString包含“Exec sp_name param1、param2等” var accessRights= this.db.ExecuteQuery(queryString,sqlParams.Values.ToArray()).AsQueryable(); 如果从存储过程返回的内容可以完美地映射到我在泛型ExecuteQuery中传递的类型(dto),那么一切都可以正常工作 问题是现在我有一个存

使用ExecuteQuery取得了一些成功,即AccessRights是我的dto,queryString包含“Exec sp_name param1、param2等”

var accessRights=
this.db.ExecuteQuery(queryString,sqlParams.Values.ToArray()).AsQueryable();
如果从存储过程返回的内容可以完美地映射到我在泛型ExecuteQuery中传递的类型(dto),那么一切都可以正常工作

问题是现在我有一个存储过程,它返回一个非标准的列名

基本上,我有一个AccessRights类(dto),它包含“userId”、“accessRightId”、“Description”

但是新的存储过程返回UserId,AccessRightId,“TemporaryDescription”

现在我不能改变它,因为其他事情都依赖它。。。如果我这样做

 var accessRights = 
    this.db.ExecuteQuery<AccessRights>(queryString, sqlParams.Values.ToArray()).AsQueryable();
var accessRights=
this.db.ExecuteQuery(queryString,sqlParams.Values.ToArray()).AsQueryable();
那么我就看不到“临时描述”,我认为它是合乎逻辑的,因为它不存在

我需要做的是将临时描述映射回描述


任何人都知道怎么做吗?

您可以尝试添加
[列(…)]
属性;不知道这样行不行

脑海中闪现的几个选项:

  • 构建一个映射为1:1(按名称)的类,然后将该数据(通过
    Select
    ,或LINQ查询)转换为实际的预期类
  • 编写一个包装SP来重命名列(不太好;您需要一个临时表,可能是由于DDL/DML交织而强制重新编译)
  • 将SP拖到数据上下文设计器上,并在生成的类型中手动重命名列(将其作为第一个项目符号的自动实现)
  • 将SP的有趣部分移动(重构)到可以从现有SP调用的UDF中,并直接从数据上下文使用UDF(将UDF拖到设计器上)

嗨,马克,不,这并不能解决问题
 var accessRights = 
    this.db.ExecuteQuery<AccessRights>(queryString, sqlParams.Values.ToArray()).AsQueryable();