Мы выполнили следующий подход, чтобы получить данные из нескольких результатов, используя 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