C# 循环遍历foreach并获取每个日期项LINQ

C# 循环遍历foreach并获取每个日期项LINQ,c#,linq,asp.net-mvc-4,C#,Linq,Asp.net Mvc 4,我有MVC5的web API。我将根据系统日期显示交货天数计算。“我的代码”适用于单个子区域,其中邮政编码用于发货日显示(相同邮政编码具有多个子区域)。谁能帮帮我吗 这是我的送货详情屏幕 这是我的C代码 int weeklyLogic=0; DateTime Firstweek=新的日期时间(); DateTime cutDayFirst=新的日期时间(); foreach(var交付日) { weeklyLogic=((int)Enum.Parse(typeof(DayOfWeek),de

我有MVC5的web API。我将根据系统日期显示交货天数计算。“我的代码”适用于单个子区域,其中邮政编码用于发货日显示(相同邮政编码具有多个子区域)。谁能帮帮我吗

这是我的送货详情屏幕

这是我的C代码

int weeklyLogic=0;
DateTime Firstweek=新的日期时间();
DateTime cutDayFirst=新的日期时间();
foreach(var交付日)
{
weeklyLogic=((int)Enum.Parse(typeof(DayOfWeek),delivery.DeliveryDay)-(int)today.DayOfWeek+7)%7;
var nextweeklyLogic=今日.AddDays(周逻辑);
第一周=第二周逻辑;
var cutDayLogic=nextweeklyLogic.AddDays(-delivery.closedaylid);
cutDayFirst=cutDayLogic;
}
var Location=(从db.SUB.AsEnumerable()中的su开始)
其中su.postcode.包含(pcode)&&
su.name.Contains(郊区名称)
在db.SubRegions上连接sur
su.子区域ID等于sur.子区域ID
加入到db.AuRegions上
sur.RegionID等于re.RegionID
将DT加入db.DeliveryPeriods on
sur.DeliveryTimeId等于DT.Id
选择新职位
{
郊区=新郊区()
{
name=su.name,
邮政编码=su.邮政编码,
},
区域=新区域()
{
Name=re.Name
},
deliveryTime=新的deliveryTime()
{
DeliveryDay=DT.DeliveryDay,
DeliveryType=DT.DeliveryType,
},
子区域=新子区域()
{
CloseDayId=sur.CloseDayId,
SubcionName=sur.subcionName,
子区域ID=sur.subsectionID
},
deliveryDays=新的deliveryDays()
{
第一周=第一周,
cutDayFirst=cutDayFirst,
},
}).ToList();
返回位置1。选择(l=>newlocationdto
{
DeliveryDay=l.deliveryTime.DeliveryDay,
邮政编码=l.郊区。邮政编码,
CloseDayId=l.Subsection.CloseDayId,
子区域ID=l.subsection.subsection ID,
TFirstDeliveryDay=l.deliveryDays.Firstweek.ToString(“dddd,d MMMM yyyy”),
TFirstCutOffDay=l.deliveryDays.cutDayFirst.ToString(“dddd,d MMMM yyyy”),
}).ToList();

正如我所见,foreach循环的逻辑是不正确的。 根据您的要求,每个

     int weeklyLogic = 0;
     DateTime Firstweek = new DateTime();
     DateTime cutDayFirst = new DateTime();

    foreach (var delivery in day)
    {

      weeklyLogic = ((int)Enum.Parse(typeof(DayOfWeek), delivery.DeliveryDay) - (int)today.DayOfWeek + 7) % 7;
      var nextweeklyLogic = today.AddDays(weeklyLogic);
      //initiated for all further processing by last value of day 
      Firstweek = nextweeklyLogic;
     //initiated for all further processing by last value of day

      var cutDayLogic = nextweeklyLogic.AddDays(-delivery.CloseDayId);
      cutDayFirst = cutDayLogic;                 

    }
根据上面的逻辑Firstweek,cutDayFirst始终是foreach循环设置的最后一个值,并且这些值对于所有位置都是相同的

您的整个位置逻辑应该在foreach中

更新

创建一个新类

public class calculatedDays
{

    public int SubRegionID{ get; set; }
    public DateTime Firstweekdate { get; set; }
    public DateTime cutDayFirstdate { get; set; }
}
根据你的逻辑,你可以这样做

    int weeklyLogic = 0;
    DateTime Firstweek = new DateTime();
    DateTime cutDayFirst = new DateTime();
    List<calculatedDays>Days=new List<calculatedDays>();
   foreach (var delivery in day)
   {

   weeklyLogic = ((int)Enum.Parse(typeof(DayOfWeek), delivery.DeliveryDay) - (int)today.DayOfWeek + 7) % 7;
     var nextweeklyLogic = today.AddDays(weeklyLogic);
     Firstweek = nextweeklyLogic;
    var cutDayLogic = nextweeklyLogic.AddDays(-delivery.CloseDayId);
    cutDayFirst = cutDayLogic;        


    calculatedDays d= new calculatedDays();
    d.SubRegionID=delivery.SubRegionID;
    d.Firstweekdate =Firstweek ;
    d.cutDayFirstdate =cutDayFirst ;
    Days.add(d);
  }

希望它能帮助你。谢谢。:)

您在该代码中使用的是星期几逻辑。是的,您的回答正确。请详细说明您面临的问题。@Rob所以不要使用它,我想您将获得完整的日期循环将显示所有CloseDayId低值id。示例CloseDayId 1您的位置逻辑或日期计算应在linq内。那我们就可以正常工作了如果在foreach中添加整个位置逻辑,它就会出现。错误1ValuesController.Get(string,string)':并非所有代码路径都返回值也返回我的返回位置1。选择(l=>new LocationDTO)到循环中间。如何在foreach内添加位置?不要在foreach内添加位置,在位置的linq中添加foreach的逻辑。日期计算是否与子区域ID唯一?
    var Location = (from su in db.Suburbs.AsEnumerable()
                             where su.postcode.Contains(pcode) &&
                             su.name.Contains(SuburbName)
                             join sur in db.SubRegions on
                             su.SubRegionID equals sur.SubregionID
                             join re in db.AuRegions on
                             sur.RegionID equals re.RegionID
                             join DT in db.DeliveryPeriods on
                             sur.DeliveryTimeId equals DT.Id
                             join dts in Days on
                             su.SubRegionID equals dts.SubRegionID 
                             select new Posts
                             {
                                 suburb = new Suburb()

                                 {
                                     name = su.name,
                                     postcode = su.postcode,

                                 },
                                 region = new Region()
                                 {
                                     Name = re.Name
                                 },

                                 deliveryTime = new DeliveryTime()
                                 {

                                     DeliveryDay = DT.DeliveryDay,
                                     DeliveryType = DT.DeliveryType,

                                 },

                                 subRegion = new SubRegion()
                                 {
                                     CloseDayId = sur.CloseDayId,
                                     SubregionName = sur.SubregionName,
                                     SubregionID = sur.SubregionID
                                 },
                                 deliveryDays = new DeliveryDays() 
                                 {

                                    Firstweek = dts.Firstweekdate ,
                                    cutDayFirst = dts.cutDayFirstdate,
                                 },
                               }).ToList();
            return Location1.Select(l => new LocationDTO

            {
                DeliveryDay = l.deliveryTime.DeliveryDay,
                PostCode = l.suburb.postcode,
                CloseDayId = l.subRegion.CloseDayId,
                SubregionID = l.subRegion.SubregionID,
                TFirstDeliveryDay = l.deliveryDays.Firstweek.ToString("dddd, d MMMM yyyy"),
                TFirstCutOffDay = l.deliveryDays.cutDayFirst.ToString("dddd, d MMMM yyyy"),

            }).ToList();