如何返回不完整的对象?

时间:2014-10-10 20:07:45

标签: c# linq list

我的select语句不返回整个Customer对象,只返回 utrustningNr beskrivning 。如何以正确的方式返回而不会出现此错误:

Cannot implicitly convert type 'System.Collections.Generic.List<AnonymousType#1>' to 'System.Collections.Generic.List<fjallvick.utrustning>

public List<utrustning> searchEquipment(string equipmentNr)
{
    var queryEquipment = from utrustning in globalDBConnString.context.utrustnings
                         where utrustning.utrustningNr == equipmentNr
                         select (new { utrustning.utrustningNr, utrustning.beskrivning });

    return queryEquipment.ToList();
}

4 个答案:

答案 0 :(得分:2)

问题是您的select子句为每个项目创建了一个新的匿名类型,而不是新的utrustning。你可能想要这样的东西:

var queryEquipment = from utrustning in globalDBConnString.context.utrustnings
                     where utrustning.utrustningNr == equipmentNr
                     select new utrustning { 
                        utrustningNr = utrustning.utrustningNr, 
                        beskrivning = utrustning.beskrivning
                     };

或者,如果globalDBConnString.context.utrustnings实际上已经返回了一系列ustrustning值,您可以使用:

return globalDBConnString.context.utrustnings
                         .Where(u => u.utrustningNr == equipmentNr)
                         .ToList();

如果希望只返回两个属性,那么最好创建一个只有具有这两个属性的新类型 - 然后更改返回类型方法,并更改select子句以使用它。

旁注:如果遵循正常的.NET命名约定,您的代码将更容易理解。

答案 1 :(得分:2)

执行此操作时,您正在选择新的匿名类型:select (new { utrustning.utrustningNr, utrustning.beskrivning })

您可以通过执行以下操作来选择特定类型:

public List<utrustning> searchEquipment(string equipmentNr)
{
    var queryEquipment = from utrustning in globalDBConnString.context.utrustnings
                         where utrustning.utrustningNr == equipmentNr
                         select new utrustning 
                             { 
                                 utrustningNr = utrustning.utrustningNr, 
                                 utrustning.beskrivning);
                             };

    return queryEquipment.ToList();
}

答案 2 :(得分:1)

List<utrustning> queryEquipment = from Utrustning in globalDBConnString.context.utrustnings
                               where Utrustning.utrustningNr == equipmentNr
                               select new utrustning { Utrustning.utrustningNr, Utrustning.beskrivning };

          return queryEquipment.ToList();

答案 3 :(得分:0)

您将无法使用您在那里编写的查询执行此操作...您将返回一个匿名对象,您将无法在代码中为其命名。

假设utrustningNr和'beskrivning'都是字符串:

更改

select new { utrustning.utrustningNr, utrustning.beskrivning }

为:

select new Tuple<string, string>(utrustning.utrustningNr, utrustning.beskrivning);

然后你的返回类型是

List<Tuple<string, string>>