簡體   English   中英

如何僅獲取具有修改后的特定行值的數據表的第一行

[英]how to get only first row of datatable with modified specific row value

我有查詢到僅匯總正在運行的作業總數。 現在,我只想要一些特定的結果,如果找到了唯一的行,例如具有分配工作的唯一類別ID,然后可以包含多個記錄集。 但沒有找到類別(如果為null),則僅傳遞數據表中的第一條記錄,其中帶有“ 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'.異常DataBinding: 'System.Data.DataRow' does not contain a property with the name 'JobID'.

只需將.ToList()替換為.CopyToDataTable()即可解決我的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM