Linq如何投射到真实物体

时间:2012-03-22 13:34:12

标签: c# linq

我有这个

var manager = context.ManagerInfoes.Select(m => m.Guid == managerGuid).First();

我该怎么把它投到:

ManagerInfo manager = context.ManagerInfoes.Select(m => m.Guid == managerGuid).First();

我想获得First()真实元素

4 个答案:

答案 0 :(得分:4)

直接使用First()而不是投放到Guid属性:

ManagerInfo manager = context.ManagerInfoes.First(m => m.Guid == managerGuid);

这与使用var

等效(强类型)
var manager = context.ManagerInfoes.First(m => m.Guid == managerGuid);

在这种情况下,我发现后一版本更具可读性。

答案 1 :(得分:1)

如下所示使用FirstOrDefualt

ManagerInfo manager = context.ManagerInfoes.FirstOrDefault(m => m.Guid == managerGuid);
if(manager!=null)
 {
          //your code
 }

优势:如果它无法找到给定条件的对象,则返回null而不是给出错误,因为你可以通过checing null看到,所以在运行时它不会破坏你的应用程序

答案 2 :(得分:1)

我认为除了FirstOrDefault()之外你应该使用“Where”而不是“Select”。

例如:

ManagerInfo manager = context.ManagerInfoes.Where(m => m.Guid == managerGuid).FirstOrDefault();

看看这是否有帮助。

答案 3 :(得分:-1)

您的代码

var manager = context.ManagerInfoes.Select(m => m.Guid == managerGuid).First();

未执行。 CLR在运行时通过此行后。在这个时候,你的经理只有一个表达式,当迭代时,会产生你正在寻找的结果。 您需要致电ToList()ToArray()以获取查询结果。

修改 上面的代码与使用强类型声明管理器的代码相同。 First()方法返回TSource类型的对象,在您的情况下,TSourcetypeof(ManagerInfo)     ManagerInfo manager = context.ManagerInfoes.Select(m => m.Guid == managerGuid).First();