[英]Reading multiple files with LINQ
我正在使用LINQ從3個不同的csv文件讀取和顯示結果。 第一個文件是CustomerInfo。 第二個是PackagePrice,第三個是HolidayTrans。 我需要在基於startDate的列表框中顯示結果。 我的listBox僅顯示第一條記錄。 這是我的LINQ和for循環:
string[] myHolidayTransactionFile = File.ReadAllLines(@"c:\temp\HolidayTrans.csv");
//create an undefined variable myQuery1
//to read each line in the HolidayTrans file
var myQuery1 = from myline in myHolidayTransactionFile
let myField = myline.Split(',')
let id = myField[0]
let startDate = myField[1]
let numOfAdults = myField[2]
let numOfKids = myField[3]
where cid == id
orderby DateTime.Parse(startDate) descending
select new
{
cid,
startDate,
numOfAdults,
numOfKids
};
lstInfo.Items.Add(string.Format(formatLine, "Start Date", "End Date", "Adult Amt", "Kid Amt"));
foreach (var personRecord in myQuery1)
{
startTourDate = personRecord.startDate;
break;
}
//putting logic for getting break on a year every time before it changes
foreach (var personRecord in myQuery1)
{
//personRecord StartDate is equal to the Start tour Date which is selected
if (personRecord.startDate == startTourDate)
{
getNumofDaysTwinAdultPrSingleAdultPr(startTourDate, ref numOfDays, ref twoAdultPr, ref oneAdultPr);
//performing calculations for endate adult amt and kid amt
EndDate = Convert.ToDateTime(startTourDate).AddDays(numOfDays);
if (int.Parse(personRecord.numOfAdults) == 2)
{
adultAmt = twoAdultPr * 2;
}
if (int.Parse(personRecord.numOfAdults) == 1)
{
adultAmt = oneAdultPr;
}
if (int.Parse(personRecord.numOfKids) == 2)
{
kidsAmt = kidsPr * 2;
}
if (int.Parse(personRecord.numOfKids) == 1)
{
kidsAmt = kidsPr;
}
if (int.Parse(personRecord.numOfKids) == 0)
{
kidsAmt = 0;
}
// the subtotal is equal to subtotal + adultamt, it continues till the value stored in the starttourdate
//is same as that of ("transition .name") but as soon as start date changes this condition
//gets false and it get transfer to the else part
subtotalA = subtotalA + adultAmt;
subtotalK = subtotalK + kidsAmt;
//displaying output in a listbox
lstInfo.Items.Add(string.Format(formatLine1, startTourDate, EndDate, adultAmt, kidsAmt));
}
請幫忙。 提前致謝
可能是因為break;
是您的foreach語句中的第二個命令。 因此,僅打印第一個記錄,因為在您的下一個foreach語句中只有一個匹配的日期。 您只需要一個foreach語句。 換句話說,刪除所有這些:
break;
}
//putting logic for getting break on a year every time before it changes
foreach (var personRecord in myQuery1)
{
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.