我们已经遵循下面的方法,使用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
[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来实现上述方法,那么性能取舍是什么