gpt4 book ai didi

linq-to-sql - 具有多个结果的 Linq to SQL 存储过程

转载 作者:行者123 更新时间:2023-12-03 09:59:56 25 4
gpt4 key购买 nike

我们按照以下方法使用 LINQ To SQL 从多个结果中获取数据

CREATE PROCEDURE dbo.GetPostByID
(
@PostID int
)
AS
SELECT *
FROM Posts AS p
WHERE p.PostID = @PostID

SELECT c.*
FROM Categories AS c
JOIN PostCategories AS pc
ON (pc.CategoryID = c.CategoryID)
WHERE pc.PostID = @PostID

从 DataContext 继承的类中的调用方法应如下所示:
[Database(Name = "Blog")]
public class BlogContext : DataContext
{
...

[Function(Name = "dbo.GetPostByID")]
[ResultType(typeof(Post))]
[ResultType(typeof(Category))]
public IMultipleResults GetPostByID(int postID)
{
IExecuteResult result =
this.ExecuteMethodCall(this,
((MethodInfo)(MethodInfo.GetCurrentMethod())),
postID);

return (IMultipleResults)(result.ReturnValue);
}
}

请注意,该方法不仅使用映射到存储过程名称的 Function 属性进行修饰,而且还使用具有存储过程返回的结果集类型的 ReturnType 属性进行修饰。此外,该方法返回 IMultipleResults 的无类型接口(interface):
public interface IMultipleResults : IFunctionResult, IDisposable
{
IEnumerable<TElement> GetResult<TElement>();
}

所以程序可以使用这个接口(interface)来检索结果:
BlogContext ctx = new BlogContext(...);

IMultipleResults results = ctx.GetPostByID(...);

IEnumerable<Post> posts = results.GetResult<Post>();

IEnumerable<Category> categories = results.GetResult<Category>();

在上面的存储过程中,我们有两个选择查询
1.选择不连接的查询
2.用Join选择查询

但是在上面的第二个选择查询中,显示的数据来自表之一,即来自类别表。但是我们已经使用了连接,并希望显示数据表,其中包含两个表的结果,即来自类别和 PostCategories。
  • 如果有人可以让我知道如何使用 LINQ to SQL
  • 来实现这一点,请告诉我
  • 如果我们使用上述方法与使用简单 SQL 实现上述方法相比,性能权衡是什么
  • 最佳答案

    Scott Guthrie (在 MS 管理 .Net 开发团队的人)几个月前在他的博客上介绍了如何做到这一点,比我做得更好, link here .在该页面上有一个标题为“处理来自 SPROC 的多个结果形状”的部分。这解释了如何处理来自不同形状(或相同形状)的存储过程的多个结果。

    我强烈建议订阅他的 RSS 提要。他几乎是 .Net 上所有事物的权威来源。

    关于linq-to-sql - 具有多个结果的 Linq to SQL 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/371445/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com