我有一个字典,我从一个对象填充,然后从两个不同的来源获取数据:
IEnumerable
基本上是一个查询。我当然设法做了第一点,但我发现做另一个有点棘手。我不知道如何使用'double tuple'的单个组件从字典中精确检索对象。这就是我所做的:
public class DictionaryValues
{
public int Index { get; set; }
public DateTime WeekStartingDate { get; set; }
public DateTime DueDate { get; set; }
public decimal DueQuantity { get; set; }
public int MaterialID { get; set; }
}
public static Dictionary<Tuple<int, int, DateTime>, DictionaryValues>
GetIncomingStockDatesWithinForecastPeriod(IEnumerable<PurchaseOrder> purchaseOrders)
{
var incomingStockDates = new Dictionary<Tuple<int, DateTime>, DictionaryValues>();
var listDictionaryValues = new List<DictionaryValues>();
for (int i = 0; i <= 20; i++)
{
var dictValuesObj = new DictionaryValues();
var timeNow = Utilities.RemoveTimeFromDate(DateTime.Now);
dictValuesObj.Index = i;
dictValuesObj.WeekStartingDate = timeNow;
timeNow.AddDays(1);
listDictionaryValues.Add(dictValuesObj);
}
// Populate the keys
foreach (var dictValuesObj in listDictionaryValues)
{
incomingStockDates.Add(Tuple.Create(dictValuesObj.Index, dictValuesObj.WeekStartingDate), dictValuesObj);
}
// Populate other values
foreach (var purchaseOrder in purchaseOrders)
{
if (purchaseOrder.DueDate == incomingStockDates.Keys.First().Item2)
{
var dictValuesObj = new DictionaryValues();
dictValuesObj.DueDate = purchaseOrder.DueDate;
dictValuesObj.DueQuantity = purchaseOrder.Quantity;
dictValuesObj.MaterialID = purchaseOrder.MaterialID;
// Update dictionary here and if the DueDate and MaterialID
// are already there then add this Quantity to the existin one
}
}
}
所以我想做的只是通过dictionary-key的第二个组件检索一个对象,更新该对象,然后如果一个对象已经存在且具有相同的DueDate
和MaterialDate
,只需添加DueDate
的{{1}}上的现有新数量。
答案 0 :(得分:1)
与其他答案一致,我认为这是一个更好地利用OO的好机会。此外,将DictionaryValues重命名为有意义的内容。我选择了StockData,但它可以是任何适合的。
public class StockDatas {
public StockDatas(IEnumerable<PurchaseOrder> purchaseOrders) {
}
public StockData GetByDay(int day) {
// Create an object from the purchaseOrders brought in from the constructor
}
public Dictionary<int, StockData> GetStockDataGroupedByDay() {
// Create a dictionary keyed by the day number
}
}
然后你的代码会很干净。
var stockDates = new StockDates(data);
var stocksOnDayThree = stockDates.GetByDay(3);
var stocksOnAllDays = stockDates.GetStockDataGroupedByDay();
然后你不必处理以元组为核心的