c#如何加入字典值

时间:2016-08-16 08:53:08

标签: c# dictionary

我正在使用一段代码来抓取合同列表并将它们添加到字典中......

Dictionary<int, decimal> contractDictionary = new Dictionary<int, decimal>();

然后填充......

sales是传递给方法的变量,数据库中有一个sales表(SalesTbl),这个变量的类型是SalesTbl ...

public void UpdateSales(SalesTbl sales)
{
...
   if (!contractDictionary.ContainsKey(sales.ContractId))
   {
     contractDictionary.Add(sales.ContractId, 0);
   }
...
}

然后代码循环遍历合同字典以创建电子邮件正文。

foreach (var item in contractDictionary)
{
   emailBody += string.Format("Contract {0} total sales cost: {1}", item.Key, item.Value);
}

我的问题是,这是取合同ID并在电子邮件中显示它与销售成本,接收电子邮件的用户不理解合同ID,我需要用合同名称替换它。这也可用于相同的方法(表格有合同名称,也有contractid)..

List<ContractForms> forms = GetFormsForSalesUpdate(update);

有没有办法可以轻松地加入这两个或者某种方式来从“表格”中获取合同名称&#39;显示它代替合同ID?

我希望一切都有意义,

提前致谢:)

4 个答案:

答案 0 :(得分:1)

这是使用from-where-select:

的一种方法
var result = from f in forms
             from d in contractDictionary
             where f.contractid == d.Key
             select string.Format("Contract {0} total sales cost: {1}", f.contractname, d.Value);
emailbody = string.Join(Environment.NewLine, result);

答案 1 :(得分:0)

List<ContractForms> forms = GetFormsForSalesUpdate(update);
foreach (var item in contractDictionary)
{
    var form = forms.Where(f => f.ContractID == item.Key).FirstOrDefault(); 
    emailBody += string.Format("Contract {0} total sales cost: {1}", form.ContractName, item.Value);
}

答案 2 :(得分:0)

您可以使用密钥作为ContractID的字典,将值Tuple<decimal, string>用作string是合同名称的字典。要添加到Dictionary<int, Tuple<decimal, string>>,请使用此contractDictionary.Add(sales.ContractId, new Tuple<decimal, string>(0, sales.ContractName));。或者只使用对象SalesTbl作为值。

答案 3 :(得分:0)

一种方法是使用Tuple<T1, T2>结构:

var contractDictionary = new DictionaryDictionary<int, Tuple<string, decimal>>();

...    
   if (!contractDictionary.ContainsKey(sales.ContractId))
   {
      contractDictionary.Add(sales.ContractId, Tuple.Create(sales.Name, 0));
   }

foreach (var item in contractDictionary.Values)
{
   emailBody += string.Format("Contract {0} total sales cost: {1}", item.Item1, item.Item2);
}

或者您可以创建自己的结构来保存所需的数据:

struct ContractData
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Amount { get; set; }

    public static ContractData Create(int id, string name, decimal value = 0)
    {
        return new ContractData() {Id = id, Name = name, Amount = value};
    }
}

并使用它:

var contractDictionary = new DictionaryDictionary<int, ContractData>();

...
   if (!contractDictionary.ContainsKey(sales.ContractId))
   {
      contractDictionary.Add(sales.ContractId, ContractData.Create(sales.ContractId, sales.Name, 0));
   }


foreach (var item in contractDictionary.Values)
{
   emailBody += string.Format("Contract {0} total sales cost: {1}", item.Name, item.Amount);
}