簡體   English   中英

無法將類型隱式轉換為 System.Collections.Generic.List 到 System.DateTime

[英]Cannot implicitly convert type to System.Collections.Generic.List to System.DateTime

我需要為表添加 2 列(LastTaskCreatedDate 和 LastTaskUpdatedDate)。 我有那個 2coulums 的查詢,我只需要將該查詢調用到我的存儲庫 function 中。我的存儲庫 function 中已經有一個查詢,它獲取其中的其他列。 由於我無法在其中添加另一個查詢,因此我在其中創建了一個 function 並在其中添加了該查詢。 請查看屏幕截圖以獲得更清晰的信息。

enter image description here pic- 獲取這兩列的查詢。

這是在其中獲取表數據的 repo 函數,在這里我還需要添加這兩列

        public WebStationResponse Filter(ProjectsFilter objFilter)
        {
            try
            {
                // Taking common project ids
                var projectIds = _currentUser.AccessInfo.UserProjects.Select(up => up.ProjectID).ToList();
                if (objFilter.ProjectID == null || objFilter.ProjectID.Count == 0)
                {
                    objFilter.ProjectID = projectIds;
                }
                objFilter.ProjectID = objFilter.ProjectID.Intersect(projectIds).ToList();
                objFilter.SetSqlPagingValues();
                objFilter.CompanyID = _currentUser.AccessInfo.CompanyID;
                objFilter.UserID = _currentUser.AccessInfo.UserID;
                objFilter.ServerTimezone = DefaultRepository.ServerTimezoneOffset();
                objFilter.UserTimezone = _currentUser.TimeZoneDetails.BaseUTCOffset;

                string strQuery = Project.GetProjects(objFilter);
                IList<ProjectDetails> lstProjectDetails = _dbContext.Database.Query<ProjectDetails>(strQuery,objFilter).ToList();
                if (lstProjectDetails.Count == 0)
                {
                    base.ResponseObject.ResponseId = (int)ResponseCode.RecordDoesnotExist;
                    return base.ResponseObject;
                }
                //
                int intRecordCount = lstProjectDetails.Count;
                if(objFilter.Pagination)
                {
                    intRecordCount = _dbContext.Database.ExecuteScalar<int>(Common.RecordCount());
                }
                FillPermissions(ref lstProjectDetails);
                FillProjectCompetencies(ref lstProjectDetails);
                **FillLastDates(ref lstProjectDetails); **
                base.FillResponseDetails(null,lstProjectDetails,null);
                base.ResponseObject.RecordCount = intRecordCount;
            }
            catch (Exception ex)
            {
                base.FillResponseDetails(ex, null, null);
            }
            return base.ResponseObject;
        }`your text`

這是我添加的 function,里面有查詢 GetLastTaskUpdateDates。

        private void FillLastDates(ref IList<ProjectDetails> lstProjects)
        {
            if (lstProjects == null || lstProjects.Count == 0)
            {
                return;
            }
            //
            var projectIds = lstProjects.Select(p => p.ProjectID).ToList();
            string strQuery = Project.GetLastTaskUpdatedDates();
            IList<ProjectDetails> lstDates = _dbContext.Database.Query<ProjectDetails>(strQuery, new { ProjectID = projectIds }).ToList();
            //
            ProjectDetails objProject = null;
            for (int intIndex = 0; intIndex < lstProjects.Count; intIndex++)
            {
                objProject = lstProjects[intIndex];
                lstProjects[intIndex].LastTaskCreated = lstDates.Where(c => c.ProjectID == objProject.ProjectID).ToList();
                lstProjects[intIndex].LastTaskUpdated= lstDates.Where(c =>c.ProjectID == objProject.ProjectID).ToList();

            }
        }`your text`

如果我們查看最后兩行,我會收到此錯誤 - 無法將類型隱式轉換為 System.Collections.Generic.List 到 System.DateTime

需要幫助,!,請回復以澄清問題

在問題的細節中給出了一切

LastTaskCreateLastTaskUpdated是 DateTime 並且您嘗試放置列表而不是 DateTimes,這是正常的。

您只能從您的列表中獲取一個日期。 我認為你正在尋找的是類似的東西(假設 lstDates 是一個日期列表):

var projectDates = lstDates.Where(c => c.ProjectID == objProject.ProjectID).OrderBy(e => e); // Ordered IEnumerable (it's a list but a bit different) of dates from the oldest to the newest
lstProjects[intIndex].LastTaskCreated = projectDates.First(); // Gives the first elem of the enumerable, should be the date of creation
lstProjects[intIndex].LastTaskUpdated = projectDates.Last(); // Gives the last elem of the enumerable, should be the last update date

我沒有放置 null 跳棋,但您可能想要添加一些以確保 projectDates 不為空。

如果 lstDates 是一個項目列表,代碼可能是這樣的:

var project = lstDates.FirstOrDefault(c => c.ProjectID == objProject.ProjectID);

if (project != null)
{
    lstProjects[intIndex].LastTaskCreated = project.LastTaskCreated 
    lstProjects[intIndex].LastTaskUpdated = project.LastTaskUpdated 
}

但這取決於 ProjectDetails 中的內容。

希望對您有所幫助

雖然我不完全理解您的場景中發生了什么,但該錯誤似乎具有相當的解釋性?

lstProjects[intIndex].LastTaskCreated 

期望日期時間,而

lstDates.Where(c => c.ProjectID == objProject.ProjectID).ToList();

是 ProjectDetails 的列表。

我懷疑你想要這樣的東西:

lstProjects[intIndex].LastTaskCreated = lstDates.First(c => c.ProjectID == objProject.ProjectID).LastTaskCreated;

暫無
暫無

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

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