2012-08-16 41 views
2
var rooms = tblRoom 
     .Where(r => r.hotel_id==1) 
     .GroupBy(p => p.tblType) 
     .Select(g => new 
      { 
      TypeName = g.Key.type_name, 
      TypeID = g.Key.type_id, 
      TypeCount = g.Count() 
      }); 

      rooms.Dump(); 

在LinqPad - 这工作正常,返回: LinqPadScreenShotLinq查询中LinqPad工作,但不是在VS

然而,当我这个转移到Visual Studio:

var rooms = dbr.Rooms 
       .Where(r => r.hotel_id == 1) 
       .GroupBy(p => p.type_id) 
       .Select(g => new 
       { 
        TypeName = g.Key.type_name, 
        TypeID = g.Key.type_id, 
        TypeCount = g.Count() 
       }); 

我收到g.Key.type_name部分的消息:

**'long'不包含'type_name'的定义,也没有接受第一个参数的扩展方法'type_name'型的“长”可以找到(是否缺少using指令或程序集引用?)**

我想要的结果添加到以下视图模型:

public class RatesViewModel 
    { 
     public string TypeName { get; set; } 
     public long TypeID { get; set; } 
     public int TypeCount { get; set; } 
    } 

我敢肯定再一次,它一定是我想念的简单东西 - 所以任何帮助将结果导入视图模型,将不胜感激。

谢谢,马克

回答

3

我想要的结果添加到以下视图模型:

我不知道你是如何与你的代码的视图模型。你正在similpy查询你的仓库并返回一个匿名对象。

如果你想返回一个视图模型,适应你的查询项目这个视图模型:

var rooms = dbr 
    .Rooms 
    .Where(r => r.hotel_id == 1) 
    .GroupBy(p => p.type_id) 
    .Select(g => new RatesViewModel 
    { 
     TypeName = g.Key.type_name, 
     TypeID = g.Key.type_id, 
     TypeCount = g.Count() 
    }) 
    .ToList(); 
return View(rooms); 

,现在你的观点显然是强类型的视图模型:

@model IEnumerable<RatesViewModel> 
+0

这很有帮助,但并未解决Linq代码中的错误消息。 – cjk 2012-08-16 13:10:12

+0

嗨达林 - 谢谢。我应该说,我试图返回数据作为API的一部分 - 我仍然使用视图模型如上,从控制器返回JSON? (它不承认视图) - 和返回房间();建议名称空间名称'房间'的类型找不到。再次感谢,马克 – Mark 2012-08-16 13:13:28

+0

请忽略我 - 我改变了控制器的开始与视图模型相同!再次感谢大家的帮助。 – Mark 2012-08-16 13:22:21

1

你有两个问题。首先,您的LINQ查询正在创建一个匿名对象枚举。你只需要修改你的查询来指定类型来解决这个问题。

接下来是您试图将查询结果分配给单个对象而不是枚举对象。要解决这个问题,你只需要钉在一个First()(或Single()FirstOrDefault(),或SingleOrDefault()视):

.Select(g => new RatesViewModel 
{ 
    TypeName = g.Key.type_name, 
    TypeID = g.Key.type_id, 
    TypeCount = g.Count() 
}.First() 
+0

嗨 - 你是对的 - 团队应该是:输入VS版本。 – Mark 2012-08-16 13:17:04

+0

@fixit - 然后看看我列出的第二个问题。这应该照顾它。 – 2012-08-16 13:18:19

1

看那GroupBy线Linqpad与Visual Studio中。你正在按不同的事物分组。

在第一个中,您是按对象分组的,但在第二个分组中,您是按数字分组的。 Key是被分组的对象,因此当您按数字分组时,调用g.key.type_name不起作用。

+0

嗨 - 你是对的 - 群组应该是:输入VS版本。 – Mark 2012-08-16 13:17:48