有选择声明的问题

时间:2013-07-19 11:32:42

标签: c# linq list select ienumerable

我有这个方法

public CreateModule GetModuleDetails(long id)
{
    var module = (_dbSis.Modules.Where(t => t.Id == id).Select(m => new CreateModule
    {
        Id = id,
        ModuleId = m.ModuleId,
        TypeName = m.ModuleType.TypeName,
        KindName = m.ModuleType.ModuleKind.KindName,
        Properties = m.PropertyConfiguration.PropertyInstances.Select(
            x => new Property { Name = x.Property.Name, Value = x.Value })
    }));

    return (module.FirstOrDefault());
}

在此方法中,假设具有 Id 40的模块具有两个属性名称和两个属性值。我想要一个只返回其中两个属性名称和值的函数,所以基本上来自上面函数的属性字段是 IEnumerable 类型。我做了这个现在不起作用

 public List<Property> GetModuleProperties(long id)
 {
     var moduleProperties = _dbSis.Modules.Where(m => m.Id == id).SelectMany(p => new Property()
     {
         Name = p.PropertyConfiguration.PropertyInstances.Select(z=>z.Property.Name),
         Value = p.PropertyConfiguration.PropertyInstances.Select(x=>x.Value)
     });
      return (moduleProperties);
  }

但我使用Linq分配NameValue的行显示错误,因为linq表达式返回Name字段的两个名称和Value字段的两个值。

如何解决这个问题,以便该方法返回正确的值列表?

实际上,此模块现在有两个属性名称:Physical ID和FirmwareVersion以及两个值:123456和1.02。

1 个答案:

答案 0 :(得分:1)

看起来你想要:

return _dbSis.Modules.Where(t => t.Id == id)
    .SelectMany(m => m.PropertyConfiguration.PropertyInstances)
    .Select(i => new Property { Name = i.Property.Name, Value = i.Value })
    .ToList();

或者:

return _dbSis.Modules.Where(t => t.Id == id)
    .SelectMany(m => m.PropertyConfiguration.PropertyInstances.Select(i => new Property {
        Name = i.Property.Name,
        Value = i.Value
    })
    .ToList();