linq-to-sql – 具有多个结果的Linq到SQL存储过程
发布时间:2020-12-12 16:10:07 所属栏目:MsSql教程 来源:网络整理
导读:我们已经遵循下面的方法,使用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.Ca
我们已经遵循下面的方法,使用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>(); 在上述存储过程中,我们有两个选择查询 但是在上述第二选择查询中,显示的数据是来自表之一,即来自类别表.但是,我们已经使用join,并希望显示数据表,其中包含两个表的结果,即Categories和PostCategories. >如果有人可以让我知道如何使用LINQ to SQL来实现这一点 解决方法Scott Guthrie(在MS上运行.Net开发团队的人)涵盖了几个月前在他的博客上做的这件事比以前更好,link here.在该页面上有一节题为“处理SPROC的多个结果形状” .这解释了如何处理来自不同形状(或相同形状)的存储过程的多个结果.我强烈建议您订阅他的RSS Feed.他几乎是所有东西的权威来源.Net. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |