C# linq2sql:使用ExceuteQuery<;dto>;当返回的行不在我的dto中时?我可以使用泛型数据类型吗?
使用ExecuteQuery取得了一些成功,即AccessRights是我的dto,queryString包含“Exec sp_name param1、param2等”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),那么一切都可以正常工作 问题是现在我有一个存
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(按名称)的类,然后将该数据(通过
,或LINQ查询)转换为实际的预期类Select
- 编写一个包装SP来重命名列(不太好;您需要一个临时表,可能是由于DDL/DML交织而强制重新编译)
- 将SP拖到数据上下文设计器上,并在生成的类型中手动重命名列(将其作为第一个项目符号的自动实现)
- 将SP的有趣部分移动(重构)到可以从现有SP调用的UDF中,并直接从数据上下文使用UDF(将UDF拖到设计器上)
var accessRights =
this.db.ExecuteQuery<AccessRights>(queryString, sqlParams.Values.ToArray()).AsQueryable();