在LINQ Select中选择多个类型

时间:2017-05-24 00:55:31

标签: c# linq

可以将其转换为选择语句吗?

foreach (var gf in CreateGenericFieldsOnInspection(model))
{
    simpleInspection.GenericFields.Add(gf.GenericFieldDefinition.Name,
                                       new LC360Carrier.Domain.Models.Import.GenericField
                                       {
                                           GenericFieldType = GenericFieldValueType.Text,
                                           Value = gf.Value
                                       });
}

2 个答案:

答案 0 :(得分:0)

看起来GenericFieldsDictionary<string, GenericFieldOrSomething>。为了使用LINQ,你可以把它扭曲成一些非常奇怪的东西。但LINQ的目的是查询一个或多个IEnumerable以获得结果或将其转换为其他内容。

它就像SQL一样。您可以查询它以获取一组记录或某些值,例如某些数字的总和。

在您的情况下,您已经获得了结果集 - 无论CreateGenericFieldsOnInspection(model)返回什么。通过结果做你已经做过的事情foreach并对每一个做一些动作是有道理的。

如果您需要查询该集合,LINQ会很方便。例如,

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);