Как вернуть несколько строк с каркасом сущностей и последовательно читать их по нескольким потокам

У меня есть временный ряд, загруженный в SQL Server, который мне нужно запросить, а затем разрешить нескольким задачам последовательно читать результаты из моего SProc.

Из того, что я нашел в google, представляется возможным выполнить запросы SProc или LINQ. Im, в настоящее время не знакомый с LINQ (предпочтение отдается SProc). Есть ли преимущество одного над другим?

Как я могу получить доступ к данным последовательным образом после выполнения SProc? Я предполагаю, что SProc просто изменит мой ObjectContext. Если это так, нужна ли мне каждая задача, чтобы подсчитывать, к какой строке она была, а затем доступ к каждому параметру ObjectContext с помощью этого счетчика, чтобы получить требуемое значение?

Ниже приведен код SProc:

CREATE PROCEDURE [dbo].[DataRetrieval]
    @StartTime      Time(0)     ='00:00:00',
    @EndTime        Time(0)     ='00:00:00',
    @StartDate      Date        ='2012-01-01',
    @EndDate        Date        ='2012-01-01',
    @Location           nchar(6)    ='Scotland'
AS
/*
Author: Hans
Date: 09-01-2013
Purpose: Used to load a large section of data into memory.
*/
SET NOCOUNT ON;
BEGIN

SELECT *
FROM 
    dbo.Data
WHERE
    LOCATION = @Location
    AND ( Date = @StartDate  AND Time >= @StartTime
               OR Date > @StartDate )
    AND ( Date = @EndDate  AND Time < @EndTime
               OR Date < @EndDate )
ORDER BY
    DATE, TIME
END

EDIT для USR                 ...

            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.CommandText = "dbo.Data_GetStoredProcedureList";
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.CommandTimeout = 10;
                cmd.Connection = connection;

                try
                {
                    connection.Open();

                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader != null && reader.HasRows)
                        {
                            cancelTask.ThrowIfCancellationRequested();

                            while (reader.Read())
                            {
                                Entity rowData = new Entity();
                                rowData.RoutineName = reader["Routine_Name"].ToString();
                                rowData.ParameterName = reader["Parameter_Name"].ToString();
                                rowData.DataType = reader["Data_Type"].ToString();

                                sProcListRetrieval.Results.Add(rowData);
                            }
                        }
                    }
                }
0
nl ja de
Вы хотите, чтобы каждый поток прочитал все строки или достигнет потока для чтения (возможно, случайного) подмножества из них?
добавлено автор usr, источник
Сколько строк есть? Не могли бы вы их скопировать в List ?
добавлено автор usr, источник
Привет, я хочу, чтобы каждый поток последовательно просматривал все строки, которые были возвращены из SProc. Этот процесс, последовательно просматривающий строки, будет выполняться несколько раз.
добавлено автор Hans Rudel, источник
Пару миллионов.
добавлено автор Hans Rudel, источник

1 ответы

Вы можете легко скопировать несколько миллионов объектов в память. Буферируйте результаты T-SQL в List и передайте этот список вашим рабочим потокам.

1
добавлено
Это полностью зависит от того, как вы называете proc. Вероятно, достаточно позвонить в ToList . Если вы опубликуете код, как вы его назовете в данный момент, я буду смотреть на него.
добавлено автор usr, источник
Похоже, вы уже имеете список и добавляете к нему. Что в этом плохого? Разве ты не можешь так сделать?
добавлено автор usr, источник
Не могли бы вы рассказать о том, как выполнить SProc/buffer результаты в список? +1 за помощь ур до сих пор :)
добавлено автор Hans Rudel, источник
ive добавил код, который я использовал в предыдущем проекте, чтобы вернуть список SProcs перед добавлением результатов в пользовательский объект. Это только delt с небольшим количеством строк.
добавлено автор Hans Rudel, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)