2014-10-10 112 views
0

我的select语句不返回整个Customer对象,只有utrustningNr开始。我如何返回它以正确的方式没有得到这个错误:如何返回不完整的对象?

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(); 
} 
+3

更换新的'{...}'用'新utrustning {...}'。 – 2014-10-10 20:09:46

回答

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

      return queryEquipment.ToList(); 
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命名约定,则代码将更易于理解。

+0

很荣幸得到你的评论Jon Skeet,WOW,感觉我现在可以死了! :O 我该怎么改变方法的返回类型? 现在我得到错误'System.NotSupportedException',并且不允许在查询中显式构造实体类型'fjallvick.utrustning'。 – 2014-10-10 20:48:34

+0

@SadjadJohansson:根据你想要达到的目标,我给了你各种不同的选择 - 我们还没有真正知道这一点。如果您发现LINQ提供程序不支持某些东西,则可能需要投影为匿名类型,然后使用'AsEnumerable()'在本地执行其余的操作,然后将匿名类型投影到另一个指定类型中。在SO上搜索'AsEnumerable' - 有很多使用该技术的答案。(我很快登上飞机,所以在这个问题上可能无法再提供帮助。) – 2014-10-10 20:52:11

0

您将无法使用您在那里编写的查询来做到这一点......您正在返回一个匿名对象,您无法在代码中给出名称。

假设utrustningNr和'简单描述”都是字符串:

变化

select new { utrustning.utrustningNr, utrustning.beskrivning } 

到:

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

那么你的返回类型为

List<Tuple<string, string>> 
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(); 
}