在实体框架中根据日期插入新行

本文关键字:日期 插入 新行 实体 框架 | 更新日期: 2023-09-27 18:13:30

我已经移交了一个使用实体框架的应用程序。我不熟悉实体,我有一个问题,我不能弄清楚。该应用程序用于将数据从数据库迁移到关系更密切的数据库。在初始迁移之后,我们必须再次运行它,以插入不属于原始迁移的其他行。(中间有3周的间隔)。我知道我必须把一个检查,我想这样做的列之一,我们使用命名为"DateChanged",但不幸的是,我不知道如何做到这一点在实体。这是我的第一次尝试,它显示为红色,令人沮丧。我在网上搜索过,但没有找到解决方案。

 if (!newData.tVehicleLogs.Any(v => v.DateChanged.Value.ToShortDateString("6/27/2014")))//I'm not sure how to check the DateChanged here.
 {
      newData.tVehicleLogs.Add(deal);
      comment = new tVehicleComment
      {
         Comment = vehicle.Reason,
         DealID = deal.DealID,
         CurrentComment = false
       };
       newData.tVehicleComments.Add(comment);
       newData.SaveChanges();
       int cId = comment.CommentID;
       deal.CommentID = cId;
       }
  }

所以你可以看到,我试图检查日期与if语句,但我不能得到语法正确…在尝试了我所知道的一切之后……这在这一点上并不多。

我基本上需要检查DateChanged是否从6/27/2014到今天的日期。如果它在那之前,那么它已经迁移过了,不需要再迁移一次。在表示注释的地方,如果该行是新的,那么它将旧的注释插入到新的注释表中,然后用注释id更新tVehicleLogs表。我只是纠结于日期确认这部分。任何帮助都非常感谢!!

编辑:这是整个代码插入到tVehicleLogs..

if (MigrateLogs)
{
    List<VLog> vlog = oldData.VLogs.ToList();
    foreach (VLog vehicle in vlog)
    {
       tBank bank;
       tCustomer cust;
       tFIManager manag;
       tSalesPerson sales;
       tMake make;
       tModel model;
       tDealership dealership;
       tMakeDealership makedeal;
       tVehicleComment comment;
       tInternalLocation location;
       string dealershipName = getProperDealershipName(vehicle.Dealership, newData);
       bank = (newData.tBanks.Any(banks => banks.BankName == vehicle.BankName) ? newData.tBanks.Where(b => b.BankName == vehicle.BankName).FirstOrDefault() : newData.tBanks.Add(new tBank { BankName = vehicle.BankName }));
       cust = (newData.tCustomers.Any(customer => customer.CustomerNumber == vehicle.CustNumber) ? newData.tCustomers.Where(customer => customer.CustomerNumber == vehicle.CustNumber).FirstOrDefault() : newData.tCustomers.Add(new tCustomer { CustomerNumber = vehicle.CustNumber, CustomerName = vehicle.Buyer }));
                //cust = (newData.tCustomers.Any(customer => customer.CustomerNumber == vehicle.CustNumber && customer.CustomerName == vehicle.CustNumber) ? newData.tCustomers.Where(customer => customer.CustomerNumber == vehicle.CustNumber).FirstOrDefault() : newData.tCustomers.Add(new tCustomer { CustomerNumber = vehicle.CustNumber, CustomerName = vehicle.Buyer }));
       manag = (newData.tFIManagers.Any(manager => manager.FIName == vehicle.FIName) ? newData.tFIManagers.Where(manager => manager.FIName == vehicle.FIName).FirstOrDefault() : newData.tFIManagers.Add(new tFIManager { FIName = vehicle.FIName }));
       sales = (newData.tSalesPersons.Any(person => person.SalesPersonNumber == vehicle.SalesPerson) ? newData.tSalesPersons.Where(person => person.SalesPersonNumber == vehicle.SalesPerson).FirstOrDefault() : newData.tSalesPersons.Add(new tSalesPerson { SalesPersonNumber = vehicle.SalesPerson }));
       make = (newData.tMakes.Any(m => m.Make == vehicle.Make) ? newData.tMakes.Where(m => m.Make == vehicle.Make).FirstOrDefault() : newData.tMakes.Add(new tMake { Make = vehicle.Make }));
       model = (newData.tModels.Any(m => m.Model == vehicle.Model) ? newData.tModels.Where(m => m.Model == vehicle.Model).FirstOrDefault() : newData.tModels.Add(new tModel { Model = vehicle.Model, MakeID = make.MakeID }));
       dealership = (newData.tDealerships.Any(d => d.DealershipName == dealershipName) ? newData.tDealerships.Where(d => d.DealershipName == dealershipName).FirstOrDefault() : newData.tDealerships.Add(new tDealership { DealershipName = dealershipName }));
       makedeal = (newData.tMakeDealerships.Any(d => d.MakeID == make.MakeID && d.DealershipID == dealership.DealershipID) ? newData.tMakeDealerships.Where(d => d.MakeID == make.MakeID && d.DealershipID == dealership.DealershipID).FirstOrDefault() : newData.tMakeDealerships.Add(new tMakeDealership { DealershipID = dealership.DealershipID, MakeID = make.MakeID }));
       location = (newData.tInternalLocations.Any(l => l.LocationName == vehicle.Location) ? newData.tInternalLocations.Where(l => l.LocationName == vehicle.Location).FirstOrDefault() : newData.tInternalLocations.Add(new tInternalLocation { LocationName = vehicle.Location }));
       //log = (newData.tVehicleLogs.Any(l => l.DealNumber == vehicle.FIMAST &&) ? newData.tVehicleLogs.Where(l => l.DealNumber == vehicle.FIMAST).FirstOrDefault() : newData.tVehicleLogs.Add(new tVehicleLog {DealNumber = vehicle.FIMAST }));
       Int32 stat;
       int? status;
       if (Int32.TryParse(vehicle.Status, out stat))
           status = stat;
       else
           status = null;
       DateTime titled, bounced, dateReceived;
       bool trueTitled = DateTime.TryParse(vehicle.Titled, out titled);
       bool trueBounced = DateTime.TryParse(vehicle.Bounced, out bounced);
       bool trueReceived = DateTime.TryParse(vehicle.DateReceived, out dateReceived);
       int dealid = newData.tVehicleDeals.Where(v => v.DealNumber == vehicle.FIMAST).FirstOrDefault().DealID;
       tVehicleLog deal = new tVehicleLog
       {
          DealNumber = vehicle.FIMAST,
          StockNumber = vehicle.StockNumber,
          BankID = bank.BankID,
          CustomerID = cust.CustomerID,
          FIManagerID = manag.FIManagerID,
          SalesPersonID = sales.SalesPersonID,
          VINNumber = null,
          DealDate = vehicle.DealDate,
          NewUsed = vehicle.NewUsed,
          GrossProfit = vehicle.GrossProfit,
          AmtFinanced = vehicle.AmtFinanced,
          CloseDate = null,
          Category = vehicle.RetailLease,
          Status = status,
          DealershipID = dealership.DealershipID,
          NewDeal = false,
          Archived = false,
          InternalLocationID = location.InternalLocationID,
          ChangedBy = vehicle.ChangedBy,
          DateChanged = DateTime.Parse(vehicle.DateChanged),
          Titled = null,
          Bounced = null,
          MakeID = make.MakeID,
          ModelID = model.ModelID,
          DealID = dealid,
          CommentID = null
       };
       if (trueTitled)
           deal.Titled = titled;
       if (trueBounced)
           deal.Bounced = bounced;
       if (trueReceived)
           deal.DateReceived = dateReceived;
       DateTime targetDate = new DateTime(2014, 06, 27);
       //if(!newData.tVehicleLogs.Any(v => v.DateChanged >= targetDate))
       if(deal.DateChanged >= targetDate && !newData.tVehicleLogs.Any(v => v.DateChanged >= targetDate))
                {
           newData.tVehicleLogs.Add(deal);
           comment = new tVehicleComment
           {
               Comment = vehicle.Reason,
               DealID = deal.DealID,
               CurrentComment = false
            };
            newData.tVehicleComments.Add(comment);
            newData.SaveChanges();
            int cId = comment.CommentID;
            deal.CommentID = cId;
         }
     }
 }

在实体框架中根据日期插入新行

我认为您不需要在这里使用linq(前提是您已经将对象拉下)。看一下日期就知道了。

// pull down the object
var deal = newData.tVehicleLogs.Where(v => v.Id == SOMEID).FirstOrDefault();
DateTime targetDate = new DateTime(2014,06,27);
if (tVehicleLogs.DateChaned <= DateTime.Now 
    && tVehicleLogs.DateChaned >= targetDate) {
}

或者,拉出所有符合日期条件的对象,然后逐个搜索它们。

List<YourObject> list = newData.tVehicleLogs.Where(v => v.DateChanged <= DateTime.Now
&& v.DateChanged >= targetDate).ToList();
foreach(var l in list) {
    // do your stuff here
}