как получить только первый ряд данных с измененным значением конкретной строки - PullRequest
1 голос
/ 13 мая 2019

У меня запрос к сводной информации об общем количестве запущенных заданий.теперь я просто хочу получить какой-то конкретный результат, если найдены уникальные строки, такие как уникальный идентификатор категории с заданием назначить, а затем с множеством записей.но никакая категория не найдена, если ноль, тогда только передайте первую запись из datatable с измененным текстом с 'ALL' в качестве имени категории.Можем ли мы достичь этого результата.

Вот мой запрос и некоторые операции, которые я выполняю с ними.

string str = "";
            DataTable dt = new DataTable();
            str = "SELECT j.[JobID], p.[Id] As PreparedEmailID,p.[Title] AS 'PreparedEmailName',j.[CreatedOn],j.[CompletedOn],j.CategoryID,j.[SubscriberCount],j.[EmailsSent],c.[CategoryName] As SubscriberCategory,(SELECT TOP 1 [Message] FROM [LoggedMessages] WHERE [JobID] =j.[JobID] ORDER BY [LoggedMessageID] DESC) AS 'LoggedMessage',(SELECT [Name] FROM tbl_User_master u WHERE u.Id =j.UserID) As CreatedBy FROM [Jobs] AS j INNER JOIN [tbl_Email_master] AS p ON p.[Id] = j.[PreparedEmailID] INNER JOIN [tbl_User_master] AS u ON u.[Id]=j.[UserID] INNER JOIN tbl_Categories c ON c.Id = j.CategoryID OR (c.Id IS NOT NULL AND j.CategoryID IS NULL) where 1=1 ";
            if (chk_date.Checked == true)
            {
                str += " and ( [CreatedOn] between '" + CommonLogic.Get_Date_From_String(txt_date_from.Text, 1);
                str += "' and '" + CommonLogic.Get_Date_From_String(txt_date_to.Text, 2) + "' )";
            }
            if (string.IsNullOrEmpty(txttitle.Text.Trim()))
            {
                str += string.Empty;
            }
            else
            {
                str += " and p.Title like '%" + txttitle.Text.Trim() + "%'";
            }
            if (ddl_fromuser.SelectedItem.Text.ToString() == ".All")
            {
                str += string.Empty;
            }
            else
            {
                str += " and j.FromuserID = CONVERT(INT," + Convert.ToInt32(ddl_fromuser.SelectedValue.ToString()) + ")";
            }
            if (ddl_subcategories.SelectedItem.Text.ToString() == ".All")
            {
                str += string.Empty;
            }
            else
            {
                str += " and j.CategoryID = CONVERT(INT," + Convert.ToInt32(ddl_subcategories.SelectedValue.ToString()) + ")";
            }
            dt = obj.Get_Data_Table_From_Str(str);
            if (dt.Rows.Count > 1)
            {
                dt.Rows[0]["SubscriberCategory"] = "ALL";
                var topRows = dt.AsEnumerable().FirstOrDefault();
                egrd.DataSource = topRows;
                egrd.DataBind();
            }
            else
            {
                egrd.DataSource = dt;
                egrd.DataBind();
            }
            ViewState["data"] = dt;

Как бы то ни было, это дает мне ошибку, как будто для этого набора записей не найден JobID.существует ли оно в наборе записей.

, пожалуйста, помогите мне ...

хорошо, я попробовал это решение, но безуспешно ... …… ..

 if (dt.Rows.Count > 1)
            {
                dt.Rows[0]["SubscriberCategory"] = "ALL";
                var topRows = dt.AsEnumerable().GroupBy(j => j.Field<int>("JobID")).Select(j => j.First()).ToList();
                egrd.DataSource = topRows;
                egrd.DataBind();
            }

это дает мне исключение как DataBinding: 'System.Data.DataRow' does not contain a property with the name 'JobID'.

1 Ответ

0 голосов
/ 13 мая 2019

Просто замените .ToList () на .CopyToDataTable (), чтобы решить мою проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...