我们按照以下方法使用 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 的无类型接口:
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. 选择带连接的查询
但是在上面的第二个选择查询中,显示的数据来自表之一,即来自类别表。但是我们使用了连接,并希望显示数据表,其中包含两个表的结果,即来自类别和 PostCategories。
- 请如果有人可以让我知道如何使用 LINQ to SQL 来实现这一点
- 如果我们使用上述方法与使用简单 SQL 实现上述方法相比,性能权衡是什么