簡體   English   中英

從linq獲取不同的價值

[英]Getting Distinct Values from linq

我有一個臨時查詢,用於生成Gridview.DataSource = DataTable,並且我試圖根據ID(ActionID)從中獲得不同的結果(沒有重復項),但是重復項仍然存在。在select中使用distinct關鍵字linq語句似乎沒有效果。(仍然在linq上掙扎)。還有另一種方法嗎?

    DataTable dtSerachResults = new DataTable(); 
string qryStr = @"SELECT Distinct [ActionID]
                                    , [Title],convert(varchar(11),[DateRaised],109)as  DateRaised
                                , convert(varchar(11)
                                ,[TargetCompletionDate] ,109) as TargetCompletionDate 

                                ,dbo.fn_GetPersonelName(fk_PersonnelID) as Responsible
                                ,dbo.fn_GetStatusNameByID(fk_StatusID)   as [Status]
                                ,dbo.fn_GetClientNameByID(fk_CustomerID)as Client
                                ,dbo.fn_GetLocationByLocationID(fk_LocationID) as Location
                                ,dbo.fn_GetClientNameByID(fk_CustomerID) as Client
                                ,dbo.fn_GetSourceNameByID(fk_SourceID)as [Source]
                                , dbo.fn_GetPersonelName(fk_RaisedBy) as RaisedBy
                                ,dbo.fn_GetPersonelName(dbo.fn_GetActionItemPrimaryResponsibleEmployeeID([ActionID]))as [Primary]
                               ,DATEDIFF(DD,DateRaised,GETDATE()) as Diff
                                ,IsApproved=
                                case IsApproved 
                                    when 1 then 'Approved'
                                    when 0 then 'Rejected'
                                    ELSE  'Waiting'
                                End 
                        FROM [ActionTrackerTable] att
                        inner join [dbo].[ActionResponsibilitiesTable] art on art.fk_ActionID=att.[ActionID] ";

                //title
                if (!string.IsNullOrEmpty(ActionTracker.Title))
                {
                    qryStr += " and Title like '" + ActionTracker.Title + "%'";
                }

                //dateraised
                if (ActionTracker.DateRaised > DateTime.MinValue)
                {
                    qryStr += " and DateRaised >= '" + ActionTracker.DateRaised.ToString() + "'";
                }
                //targetgedate
                if (ActionTracker.TargetCompletionDate > DateTime.MinValue)
                {
                    qryStr += " and TargetCompletionDate>= '" + ActionTracker.TargetCompletionDate.ToString() + "'";
                }

                //Location
                if (ActionTracker.Location != null)
                {
                    qryStr += " and   fk_LocationID= " + ActionTracker.Location.LocationID.ToString() + "";
                }
                //client
                if (ActionTracker.Customer != null)
                {
                    qryStr += " and   fk_CustomerID= " + ActionTracker.Customer.CustomerID.ToString() + "";
                }
                //source
                if (ActionTracker.Source != null)
                {
                    qryStr += " and   fk_SourceID= " + ActionTracker.Source.SourceID.ToString() + "";
                }
                //approval status
                if (ActionTracker.SearchApprovalStr == "Approved")
                {
                    qryStr += " and   IsApproved= " + 1.ToString();
                }
                if (ActionTracker.SearchApprovalStr == "Rejected")
                {
                    qryStr += " and   IsApproved= " + 0.ToString();
                }

                if (ActionTracker.SearchApprovalStr == "Waiting")
                {
                    qryStr += " and   IsApproved is null";
                }
                //status
                if (ActionTracker.Status !=null)
                {
                    if (ActionTracker.Status.StatusID>0)
                    {
                        qryStr += " and   [fk_StatusID]= "+ActionTracker.Status.StatusID.ToString();
                    }
                }

                //ref num
                if (ActionTracker.ActionTrackerID > 0)
                {
                    qryStr += " and   ActionID = " + ActionTracker.ActionTrackerID.ToString();
                }

                if ( (strSearchTerm)=="All" ||(strSearchTerm)=="Select Employee"  )
                {                                )";

                    //rrun qry
                     //add the order str
                     qryStr += " order by ActionID desc ";
                     System.Data.SqlClient.SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection();
                     using (sqlConn = ConnectionClass.CreateConnection.publicGetConn())
                     {
                         sqlConn.ConnectionString = ConnectionClass.CreateConnection.getConnectionString();
                         sqlConn.Open();
                         if (sqlConn.State == System.Data.ConnectionState.Open)
                         {
                             using (System.Data.SqlClient.SqlCommand sqlCMD = new System.Data.SqlClient.SqlCommand())
                             {
                                 sqlCMD.CommandText = qryStr;
                                 sqlCMD.CommandType = System.Data.CommandType.Text;
                                 sqlCMD.Connection = sqlConn;
                                 //parameters
                                 //no 1 is reponsbile
                                 //sqlCMD.Parameters.AddWithValue("@responsibleEmployeeID", responsibleEmployeeID);

                                 //return value

                                 System.Data.SqlClient.SqlDataReader rdr = sqlCMD.ExecuteReader();
                                 //get dataset
                                 DataSet DS = new DataSet();
                                 //load dataset in table
                                 DataTable dt = new DataTable();
                                 dt.Load(rdr);

                                 DS.Tables.Add(dt);
                //get Distinct rows based on the Thier rows 


 var q2 = (from dr in dt.AsEnumerable() select dr).Distinct().CopyToDataTable();
                                     dtSerachResults = (from dr in dt.AsEnumerable() select dr).Distinct().CopyToDataTable();


                }


            }

不同會影響所有列,而不僅是它前面的列。 您可以將其余的列分組(並將適當的聚合函數添加到選擇列表中)。 它很大程度上取決於您的數據外觀。

暫無
暫無

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

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