Мы следовали подходу ниже, чтобы получить данные из нескольких результатов с помощью 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>();
В вышеупомянутых хранимых процедурах у нас было два запроса select
1. Выберите запрос без объединения
2. Выберите запрос с помощью Join
Но в указанном выше втором запросе выбора данные, которые отображаются, взяты из одной таблицы, то есть из таблицы категорий. Но мы использовали соединение и хотим отобразить таблицу данных с результатами обеих таблиц, т. Е. Из категорий, а также из посткатегорий.
- Пожалуйста, если кто-нибудь может дать мне знать, как этого добиться, используя LINQ to SQL
- Каков компромисс производительности, если мы используем вышеупомянутый подход по отношению к реализации вышеупомянутого подхода с простым SQL