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

时间:2014-07-17 13:03:50

标签: c# asp.net sql entity-framework

我已经移交了一个使用实体框架的应用程序。我对实体并不熟悉,而且我遇到了一个我无法弄清楚的问题。此应用程序用于将数据从数据库迁移到更多关系数据库。在初始迁移之后,我们必须再次运行它以插入不属于原始迁移的其他行。 (有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语句检查日期,但是我无法在尝试所有我知道的尝试之后获得正确的语法...这不是&#39在这一点上。

我基本上需要检查DateChanged是否从2014年6月27日到今天的日期。如果在此之前,它已经迁移过,并且不需要再次迁移。如果该行是注释,如果该行是新的,则它将旧注释插入新注释表中,然后使用commentID更新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;
         }
     }
 }

1 个答案:

答案 0 :(得分:2)

我认为您不需要在这里使用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
}