可以将其转换为选择语句吗?
foreach (var gf in CreateGenericFieldsOnInspection(model))
{
simpleInspection.GenericFields.Add(gf.GenericFieldDefinition.Name,
new LC360Carrier.Domain.Models.Import.GenericField
{
GenericFieldType = GenericFieldValueType.Text,
Value = gf.Value
});
}
答案 0 :(得分:0)
看起来GenericFields
是Dictionary<string, GenericFieldOrSomething>
。为了使用LINQ,你可以把它扭曲成一些非常奇怪的东西。但LINQ的目的是查询一个或多个IEnumerable
以获得结果或将其转换为其他内容。
它就像SQL一样。您可以查询它以获取一组记录或某些值,例如某些数字的总和。
在您的情况下,您已经获得了结果集 - 无论CreateGenericFieldsOnInspection(model)
返回什么。通过结果做你已经做过的事情foreach
并对每一个做一些动作是有道理的。
var filteredProperties = CreateGenericFieldsOnInspection(model)
.Where(property => property.Name.StartsWith("X"));
但即便如此,一旦你拥有了这个集合,使用foreach
循环仍然有意义。
你有时会看到这一点 - 我在第一次学习LINQ时就这样做了:
CreateGenericFieldsOnInspection(model).ToList()
.ForEach(property => DoSomethingWith(property));
我们将某些内容转换为List
因为我们可以使用.ForEach
。但它没有任何好处。它只是foreach
,具有不同的语法和额外的步骤。
答案 1 :(得分:0)
我有一个允许添加的扩展方法。我只是遇到了语法问题。 Bagus Tesa,上面也很有帮助。感谢。
simpleInspection.GenericFields = simpleInspection.GenericFields.Union(CreateGenericFieldsOnInspection(model).Select(x => new KeyValuePair<string, object>(x.GenericFieldDefinition.Name, new LC360Carrier.Domain.Models.Import.GenericField
{
GenericFieldType = GenericFieldValueType.Text,
Value = x.Value
}))).ToDictionary(x => x.Key, x => x.Value);