【发布时间】:2021-01-30 06:22:36
【问题描述】:
在我的程序中,我加入了两个 IEnumerables 并将它们转换为字典,如下所示:
//list1 is a list of all contracts, list2 is a list of special contracts
var list1 = //List of objects
Var list2 = //List of objects
var combined = List1.Join(list2, c=> s.contractNumber, dto => dto.contract, (s, dto) => dto)
.ToDictonary( x => x.Contract, y => y.Date);
var final = list1.Select(contractNumber =>{
var number = contract.ContractNumber;
contract.Date = combined.ContainsKey(number) ? combined[number] : string.Empty;
}
简短的版本是这样的:我们使用 list1 来填充我们在前端显示的表格,但业务请求的更改需要显示来自单独 API 调用的信息。 List1 没有包含日期字段,但 list2 包含。所以我们将属性添加到list1中,然后使用字典根据键值对填充属性。
他们再次请求在前端显示来自 list2 的另一个字段,所以我想使用这样的元组:
.ToDictionary(x=>x.Contract, y => Tuple.Create(y.Date, y.Type));
但我在这里更新代码时遇到了困难:
contract.Date = combined.ContainsKey(number) ? combined[number] : string.Empty; //It breaks due to converting tuple<string, string> to string
使用基于键的元组中的值之一填充字段的最佳方法是什么?
【问题讨论】:
-
尝试 null 而不是 string.Empty
-
问题是当条件为真时,组合的[数字]部分。 IT 想要提取与该键关联的值,但现在有两个值,所以它很困惑。我需要它只使用 Value1
-
使用:combined.Item2
-
combined[number].Item2 有效。谢谢!
-
我不明白你的代码。例如,
var final = list1.Select(contractNumber =>{行声明了一个带有参数contractNumber的 lambda,该参数在任何地方都没有使用。之后出现一个变量contract,它没有在任何地方声明。另外我不确定属性s.contractNumber和contract.ContractNumber是否不同,或者相同的属性是否存在转录错误(以c而不是C开头)。
标签: c# .net linq dictionary tuples