2012-08-09 24 views
0

我希望能集团子LINQ查询,但LinqPad在这一行给了一个错误:和字段不能分配方法错误

ratetocharge =rtc.rate.Sum 

的错误是:不能将方法组分配给匿名类型属性。

任何人都可以建议我应该在该行输入什么,给我一个利率表内的汇率?

谢谢

马克

var mtgRooms = RoomUnit 
     .Where(r => r.building_id==1) 
     .GroupBy(p => p.Type) 
     .Select(g => new 
      { 
      TypeName = g.Key.type_name, 
      TypeID = g.Key.type_id, 
      TypeCount = g.Count(), 
      rates = rates 

     .Select ( rtc => 
       new 
       { 
        occ = rtc.occ, 
        ratetocharge =rtc.rate.Sum // this is the line which errors 
       } 
        ) 
       .GroupBy(pe => pe.occ) 
      } 
      ); 

      mtgRooms.Dump(); 

编辑:要添加更详细

表:

表RoomUnit

type_id (key - int) 
type_name (string - eg. large room, small room, medium room) 
building_id (int - denotes a number of buildings this room could be within) 

价格

rate_id 
type_id (foreign key to RoomUnit) 
occ (type of rate - ie. Desk, FullRoom) 

的想法是我想提供一个模型,如下所示:

Type of Room 
Number of Types of Room available 
Type of Occ/Desks available 
Sum of Rate (rate to charge) for each type of desk 

目前显示的内容是:

LargeRoom, Type 3049, Type Count 18 (or whatever is available) 
    occ FullRoom, ratetocharge 250, numOfOcc 1 
    occ FullRoom, ratetocharge 250, numOfOcc 1 
    occ FullRoom, ratetocharge 250, numOfOcc 1 
    occ Single Desk, ratetocharge 45, numOfOcc 1 
    occ Single Desk, ratetocharge 45, numOfOcc 1 

SmallRoom, Type 3093, Type Count 4 (or whatever is available) 
    occ FullRoom, ratetocharge 150, numOfOcc 1 
    occ FullRoom, ratetocharge 150, numOfOcc 1 
    occ Single Desk, ratetocharge 45, numOfOcc 1 
    occ Single Desk, ratetocharge 45, numOfOcc 1 
    occ Single Desk, ratetocharge 45, numOfOcc 1 

而我会就像在子表中将Occ的rateToCharge总和的模型一样,例如:

LargeRoom, Type 3049, Type Count 18 (or whatever is available) 
    occ FullRoom, ratetocharge 750, numOfOcc 3 
    occ Single Desk, ratetocharge 90, numOfOcc 2 

SmallRoom, Type 3093, Type Count 4 (or whatever is available) 
    occ FullRoom, ratetocharge 300, numOfOcc 2 
    occ Single Desk, ratetocharge 135, numOfOcc 3 

回答

2

变化ratetocharge =rtc.rate.Sum变为ratetocharge =rtc.rate.Sum()。使用Sum编译器认为您正在尝试使ratetocharge变量分配给方法组; Sum方法的一组方法(包括过载)。相反,您需要拨打电话Sum(),这实际上会调用该方法。

---编辑---看你更多的信息,我与这个打算,以实现

var mtgRooms = RoomUnit 
.Where(r => r.building_id==1) 
.GroupBy(p => p.Type) 
.Select(g => new 
    { 
    TypeName = g.Key.type_name, 
    TypeID = g.Key.type_id, 
    TypeCount = g.Count(), 
    rates = Rates.Where(rt => rt.type_id == g.type_id).GroupBy(rt => rt.occ) 
      .Select(proj => new { 
       occ = proj.Key, 
       ratetocharge = proj.Sum(s => s.rate), 
       numOfOcc = proj.count())      
      })    
    } 
); 
+0

喜@AlexC的方式 - 我试过了,但得到的错误:“小数”不包含'Sum'和最佳扩展方法重载定义'System.Linq.Queryable.Sum(System.Linq.IQueryable )'有一些无效参数 实例参数:不能从'decimal?'转换到'System.Linq.IQueryable ' – Mark 2012-08-09 11:40:20

+0

嗨 - 我已经在我的问题中添加了一些更多的细节,以帮助显示我想要得到的结果。目前,每个子表格都是单独列出的,我想对它们进行分组,添加要付费的费率总和,以及每个表格中包含多少个课桌/房间的计数。再次感谢您,Mark – Mark 2012-08-09 12:14:18

+0

再次感谢您 - rates.GroupBy(rt => rt.occ) - 费率字在Linq中加下划线,并建议:无效的匿名类型成员声明符。匿名类型成员必须声明为成员分配,简单名称或成员访问权限。 – Mark 2012-08-09 12:53:25