我正在使用一段代码来抓取合同列表并将它们添加到字典中......
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?
我希望一切都有意义,
提前致谢:)
答案 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);
}