linq2sql:使用 ExceuteQuery当返回的行不在我的 dto 中时?我可以使用通用数据类型吗?

发布于 2024-08-04 21:30:14 字数 795 浏览 2 评论 0原文

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

  var accessRights = 
    this.db.ExecuteQuery<AccessRights>(queryString, sqlParams.Values.ToArray()).AsQueryable();

如果从存储过程返回的内容可以完美映射到我在泛型中传递的类型(dto),那么一切都很完美ExecuteQuery

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

基本上我的 AccessRights 类(dto)包含“userId”、“accessRightId”、“Description”,

但新的存储过程返回 UserId、AccessRightId、“TemporaryDescription”。

现在我无法更改它,因为其他事情取决于它......如果我这样做,

 var accessRights = 
    this.db.ExecuteQuery<AccessRights>(queryString, sqlParams.Values.ToArray()).AsQueryable();

我就看不到“TemporaryDescription”,我认为这是合乎逻辑的,因为它不存在

我需要做的是将temporaryDescription映射回描述。

任何人都知道如何做到这一点?

been using ExecuteQuery with some success, i.e. where AccessRights is my dto and queryString contains "Exec sp_name param1,param2 etc"

  var accessRights = 
    this.db.ExecuteQuery<AccessRights>(queryString, sqlParams.Values.ToArray()).AsQueryable();

Everything works perfect if what returns from the stored procedure can be mapped perfectly to the type (dto) that i pass in the generic ExecuteQuery

Problem is now i have a stored procedure that returns a non standard column name.

Basically my i hav my AccessRights class (dto) which contains, "userId", "accessRightId", "Description"

but the new stored procedure returns UserId, AccessRightId, "TemporaryDescription".

now i can't change it as other things depend on it... if I do

 var accessRights = 
    this.db.ExecuteQuery<AccessRights>(queryString, sqlParams.Values.ToArray()).AsQueryable();

then i don't see "TemporaryDescription", which i suppose is logical as it doesn't exist

What i need to do is map temporaryDescription back to description.

Any body has any idea how to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

地狱即天堂 2024-08-11 21:30:14

您可以尝试添加 [Column(...)] 属性;不知道这是否有效。

脑海中浮现出几个选项:

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

You could try adding the [Column(...)] attribute; no idea if that'll work.

A few options that leap to mind:

  • build a class that does map 1:1 (by name), and then translate this data (via Select, or a LINQ query) into your actual intended class
  • write a wrapper SP that renames the column (not nice; you'd need a temp table, presumably forcing recompile due to DDL/DML interleave)
  • drag the SP onto the data-context designer and rename the columns manually in the generated types (consdier this as an automated implementation of the first bullet)
  • move (refactor) the interesting part of the SP into a UDF that you can call from your existing sp, and use the UDF directly from the data-context (drag the UDF onto the designer)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文