我知道这可以使用lambda表达式重写。但我似乎无法弄明白。有没有人对如何用lambda写出来有意见。
foreach (var _systemItem in _systemData)
{
foreach (var _institutionItem in _institutionData)
{
if (_systemItem.LookupValue == _institutionItem.OriginalSystemLookupValue)
{
_values.Add(new LookupValue()
{
DisplayText = _institutionItem.LookupText,
Value = _institutionItem.LookupValue
});
}
else
{
_values.Add(new LookupValue()
{
DisplayText = _systemItem.LookupText,
Value = _systemItem.LookupValue
});
}
}
}
答案 0 :(得分:4)
像这样:
values.AddRange(from s in _systemData
from i in institutionData
select s.LookupValue == i.OriginalSystemLookupValue ?
new LookupValue {
DisplayText = _institutionItem.LookupText,
Value = _institutionItem.LookupValue
}
: new LookupValue {
DisplayText = _systemItem.LookupText,
Value = _systemItem.LookupValue
}
);
答案 1 :(得分:3)
_values
一个List<LookupValue>
是空的吗?如果是这样,那看起来可能是这样的:
_values = (from x in _systemData
from y in _institutionData
let item = x.LookupValue == y.OriginalSystemLookupValue ? x : y
select new LookupValue { DisplayText = item.LookupText,
Value = item.LookupValue })
.ToList();
假设_systemItem
和_institutionItem
属于同一类型。如果它们是不相关的类型,您可能希望为它们提供一个定义LookupText
和LookupValue
(或甚至是ToLookupValue
方法)的公共接口,然后在条件中强制转换其中一个操作数操作员到界面。例如:
_values = (from x in _systemData
from y in _institutionData
let item = x.LookupValue == y.OriginalSystemLookupValue
? (ILookupSource) x : y
select item.ToLookupValue())
.ToList();
答案 2 :(得分:0)
当然,我有意见。我会这样写:
var pairs = _systemData.SelectMany(s =>
_institutionData.Select(i => new { System = s, Institution = i }));
_values.AddRange(pairs.Select(x =>
{
bool match = x.System.LookupValue == x.Insitution.OriginalSystemLookupValue;
return match ? new LookupValue(x.Institution) : new LookupValue(x.System);
}));
将LookupValue
的对象初始值设定项移动到采用Institution
或System
的实际构造函数中。