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は、すべてのユーザーの名前と名前の文字列をマージする必要があります。DevExpress Mvc Gridを使用し、この方法で渡す必要があるため、これはIQueryableである必要があります。グリッドはページングを処理するため、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、SarahHodge"...などになります。

ご入力いただきありがとうございます。

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 に答える