如何根据日期列获取最新信息并返回BuildMetrics类型的对象?

时间:2017-03-07 02:40:10

标签: c# entity-framework

我正在尝试检索SP,Latestbuild(基于时间戳)并宣布日期如下,我需要以下指导

1.如何根据software_product_builds表中date_announced(格式为2016-12-02 19:24:32)列的时间戳获取最新版本?我尝试了如下但是没有工作

softwareBuildMetrics.LatestBuild = bitDB.software_product_builds.Where(x => x.software_product_build_id == softwareProductid).Select(x => x.software_product_build).FirstOrDefault();

2.如何返回Build Metrics类型的对象,我认为当前的错误与此有关?

public class BuildMetrics
{
    public string SP { get; set; }
    public string LatestBuild { get; set; }
    public string AnnouncedDate { get; set; }

}

方法: -

    public IEnumerable<BuildMetrics> GetBuildMetrics()
    {
        var bitDB = new BitDatabaseConnection().bitDB;
        List<BuildMetrics> softwareBuildMetrics = new List<BuildMetrics>();
         //Get unique list of software product ids
         var softwareProductIds = bitDB.software_products.Select(x => x.id).Distinct().ToList();
        foreach (var softwareProductid in softwareProductIds)
           {
               softwareBuildMetrics.SP = bitDB.software_products.Where(x => x.id == softwareProductid).Select(x => x.software_product).FirstOrDefault();
               softwareBuildMetrics.LatestBuild = bitDB.software_product_builds.Where(x => x.software_product_build_id == softwareProductid).Select(x => x.software_product_build).FirstOrDefault();
               softwareBuildMetrics.AnnouncedDate = bitDB.software_product_builds.Where(x => x.software_product_build_id == softwareProductid).Select(x => x.date_announced).FirstOrDefault();


            }
    }

错误: -

Error   1   'System.Collections.Generic.List<Dashboard.Model.ApiModels.BuildMetrics>' does not contain a definition for 'SP' and no extension method 'SP' accepting a first argument of type 'System.Collections.Generic.List<Dashboard.Model.ApiModels.BuildMetrics>' could be found (are you missing a using directive or an assembly reference?) C:\Users\gnakkala\gnakkala_dashboard\depot\software\projects\user_branches\gnakkala\Dashboard\Dashboard.Data.Repository\BuildRepositories\SoftwareProductRepository.cs  22  41  Dashboard.Data.Repository


Error   2   'System.Collections.Generic.List<Dashboard.Model.ApiModels.BuildMetrics>' does not contain a definition for 'LatestBuild' and no extension method 'LatestBuild' accepting a first argument of type 'System.Collections.Generic.List<Dashboard.Model.ApiModels.BuildMetrics>' could be found (are you missing a using directive or an assembly reference?)   C:\Users\gnakkala\gnakkala_dashboard\depot\software\projects\user_branches\gnakkala\Dashboard\Dashboard.Data.Repository\BuildRepositories\SoftwareProductRepository.cs  23  41  Dashboard.Data.Repository

Error   3   'System.Collections.Generic.List<Dashboard.Model.ApiModels.BuildMetrics>' does not contain a definition for 'AnnouncedDate' and no extension method 'AnnouncedDate' accepting a first argument of type 'System.Collections.Generic.List<Dashboard.Model.ApiModels.BuildMetrics>' could be found (are you missing a using directive or an assembly reference?)   C:\Users\gnakkala\gnakkala_dashboard\depot\software\projects\user_branches\gnakkala\Dashboard\Dashboard.Data.Repository\BuildRepositories\SoftwareProductRepository.cs  24  41  Dashboard.Data.Repository

2 个答案:

答案 0 :(得分:1)

这不是你如何将数据添加到列表而是做这样的事情

  foreach (var softwareProductid in softwareProductIds)
           {
               var matric = new BuildMetrics();
               matric.SP = bitDB.software_products.Where(x => x.id == softwareProductid).Select(x => x.software_product).FirstOrDefault();
               matric.LatestBuild = bitDB.software_product_builds.Where(x => x.software_product_build_id == softwareProductid).Select(x => x.software_product_build).FirstOrDefault();
               matric.AnnouncedDate = bitDB.software_product_builds.Where(x => x.software_product_build_id == softwareProductid).Select(x => x.date_announced).FirstOrDefault();
               softwareBuildMetrics.Add(matric);

            }

因为List<BuildMetrics> softwareBuildMetrics = new List<BuildMetrics>(); 表示BuildMetrics个对象的列表,这就是为什么在上面的代码中我创建了BuildMetrics的新对象

var matric = new BuildMetrics();

并填写数据,最后我将此对象添加到softwareBuildMetrics.Add(matric);

列表中

修改

您可以使用OrderByDecending获取最新版本

softwareBuildMetrics.LatestBuild = bitDB.software_product_builds.Where(x => x.software_product_build_id == softwareProductid).OrderByDescending(x => x.date_announced).Select(x => x.software_product_build).FirstOrDefault();

答案 1 :(得分:0)

你有这行代码:

List<BuildMetrics> softwareBuildMetrics = new List<BuildMetrics>(); 

这是BuildMetrics的通用列表。列表类型没有SPLatestBuildAnnouncedDate属性,因此您收到了该错误。

我认为你想要做的是:

var newMetric = null;
foreach (var softwareProductid in softwareProductIds)
{
    newMetric = new BuildMetrics();
    newMetric.SP = bitDB.software_products.Where(x => x.id == softwareProductid).Select(x => x.software_product).FirstOrDefault();
    newMetric.LatestBuild = bitDB.software_product_builds.Where(x => x.software_product_build_id == softwareProductid).Select(x => x.software_product_build).FirstOrDefault();
    newMetric.AnnouncedDate = bitDB.software_product_builds.Where(x => x.software_product_build_id == softwareProductid).Select(x => x.date_announced).FirstOrDefault();

    softwareBuildMetrics.Add(newMetric);
}

return softwareBuildMetrics;