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

我们已经遵循下面的方法,使用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属性进行装饰,还可以使用返回类型属性与存储过程返回的结果集的类型进行装饰.此外,该方法返回一个非类型化的接口IMultipleResults:

public interface IMultipleResults : IFunctionResult,Idisposable
{
    IEnumerable<TElement> GetResult<TElement>();
}

所以程序可以使用这个界面来检索结果:

BlogContext ctx = new BlogContext(...);

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

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

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

在上述存储过程中,我们有两个选择查询
1.选择查询而不加入
2.使用Join选择查询

但是在上述第二选择查询中,显示的数据是来自表之一,即来自类别表.但是,我们已经使用join,并希望显示数据表,其中包含两个表的结果,即Categories和PostCategories.

>如果有人可以让我知道如何使用LINQ to sql来实现这一点
>如果我们使用上述方法相对于使用简单的sql来实现上述方法,那么性能取舍是什么

解决方法

Scott Guthrie(在MS上运行.Net开发团队的人)涵盖了几个月前在他的博客上做的这件事比以前更好,link here.在该页面上有一节题为“处理SPROC的多个结果形状” .这解释了如何处理来自不同形状(或相同形状)的存储过程的多个结果.

我强烈建议您订阅他的RSS Feed.他几乎是所有东西的权威来源.Net.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...