0

我的数据库中有一个IQueryable<Model>对象。我需要将它们投射到IQueryable<ViewModel>

class Model 
{
    public Guid ModelId { get; set; }

    // some properties

    public virtual User Users{ get; set; }

}

class User
{
    public Guid UserId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

class ViewModel
{
    public Guid ModelId { get; set }
    public string UsersName { get; set; }
}

ViewModel.UsersName 应该是所有用户名字和姓氏的合并字符串。这需要是一个 IQueryable,因为我将使用 DevExpress Mvc Grid 并且我需要以这种方式传递它。Grid 处理分页,所以它需要 IQueryable。

我试过了:

IQueryable<ViewModel> viewModel = model.Select(s => new ViewModel()
        {

            UsersName = s.Users
                .OrderBy(d => d.LastName)
                .ThenBy(d => d.FirstName)
                .Aggregate(string.Empty, (s1, users) => users.FirstName + ' ' + users.Surname + ", ")
        });

但它不能翻译为 linq 到实体。我也尝试过 string.join() 但它也不起作用。

结果字符串应为示例:“Cecelia Leblanc, Sarah Hodge”...等。

感谢您的任何意见。

4

1 回答 1

2

通常视图模型/DTO 不应该太聪明,但在这种情况下,一点点聪明就太方便了。创建一个视图模型,如:

class ViewModel
{
    public Guid ModelId { get; set; }
    public IEnumerable<string> UserNames { get; set; }
    public string UserNamesString
    {
        get { return string.Join(", ", this.UserNames); }
    }
}

填充它

var models = s.Models.Select(m => new ViewModel
                        { ModelId = m.ModelId,
                          UserNames = m.Users
                                       .OrderBy(d => d.LastName)
                                       .ThenBy(d => d.FirstName)
                                       .Select(u => u.FirstName + ' ' 
                                                  + u.Surname)
                        }).ToList();

并从 访问该UserNamesString属性models.AsQueryable()

于 2013-02-15T22:01:30.453 回答