lambda innerjoin转换错误

时间:2014-12-10 16:08:19

标签: c# entity-framework lambda

嘿伙计们,我有以下代码,

public IList<UserGroupAssignmentModel> GetUsersByGroupName(string name)
{
    var model = _userGroupAssignmentRepository.Table
        .Join(_userGroupsRepository.Table,
            x => x.groupId,
            y => y.Id,
            (x, y) => new { Assignment = x, Group = y })
        .Where(xy => xy.Group.GrpName == name)
        .ToList();

    return model;
}

代码在返回我的模型时抱怨。

"Cannot Convert List<anonymousType#7> to Ilist<userGroupAssignmentModel>"

现在我认为这是因为此查询的结果是从两个表中获取所有字段?并尝试将其存储到UserGroupAssignmentModel列表中,尽管这只是第一个表。

什么是返回此结果的正确方法?

更新:UserGroupAssignmentModel包含4个字段

(Id, UserId, groupId, DateAssigned) 

此模型也用于_userGroupAssignmentRepository。

_userGroupsRepository由具有

的UserGroupModel构成
(Id,grpName, GrpDateCreated, GrpIsdeleted,GrpOrderNum)

所以基本上我试图根据组名上的链接从分配表中获取结果集。希望这会有所帮助。

编辑:你能让我知道为什么这个问题有一个downvote?很高兴知道我可以改变它

1 个答案:

答案 0 :(得分:2)

您需要在查询中创建新的UserGroupAssignmentModel而不是匿名类。

更改此

(x, y) => new { Assignment = x, Group = y }

到这个

(x, y) => new UserGroupAssignmentModel { Assignment = x, Group = y }

或任何适合创建UserGroupAssignmentModel的内容。

修改

或者如果您在投影之前需要查询中的值。

var model = _userGroupAssignmentRepository.Table
    .Join(_userGroupsRepository.Table,
        x => x.groupId,
        y => y.Id,
        (x, y) => new { Assignment = x, Group = y })
    .Where(xy => xy.Group.GrpName == name)
    .Select(xy => new UserGroupAssignmentModel(/*pass params here*/)
                  {
                      // or set properties here
                  })
    .ToList();