-1

私はこの方法を持っています

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 のモジュールに2 つのプロパティ名と 2 つのプロパティ値があるとします。これらのプロパティ名と値の 2 つだけを返す関数が必要だったので、基本的に上記の関数のPropertiesフィールドは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 式がフィールドに 2 つの名前とフィールドに 2 つの値を返すため、 Where i assign Nameand using Linq の行にエラーが表示されます。ValueNameValue

メソッドが適切な値のリストを返すようにするには、どうすればこれを解決できますか?

実際、現在、このモジュールには 2 つのプロパティ名があります: Physical ID と FirmwareVersion で、2 つの値は 123456 と 1.02 です。

4

1 に答える 1

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();
于 2013-07-19T11:37:14.233 に答える