如何仅获取具有修改后的特定行值的数据表的第一行

时间:2019-05-13 08:39:06

标签: sql asp.net tsql c#-4.0

我有查询来仅汇总正在运行的作业总数。现在,我只想要一些特定的结果,如果找到了唯一的行,例如具有分配工作的唯一类别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'.

这样的例外

1 个答案:

答案 0 :(得分:0)

只需将.ToList()替换为.CopyToDataTable()即可解决我的问题