0

レポートを表示する詳細ページがありますが、複数のレポートを表示するインデックス ページが必要です。これをうまく設定しました (ユーザーのページでチェックボックスを選択し、「印刷ページ」に情報の一部を表示できますが、関連情報を表示する方法がわかりません。

私の詳細は、このようなユーザーIDを取ります -

 public ViewResult Details(string id)
        {
User user = db.Users
                .Include(i => i.UserDetails)
                .Include(i => i.TRS)
                .Include(i => i.Pension)
                .Include(i => i.LifeAssurance)
                .Include(i => i.IncomeProtection)
                .Where(i => i.UserName == id)
                .Single();

string pensionProviderName = providerRepository.GetProviderByID(user.Pension.PensionProviderID).ProviderName;

TRSViewModel viewModel = new TRSViewModel
            {
                UserName = user.UserName,
                FirstName = user.UserDetails.FirstName,
                LastName = user.UserDetails.LastName,
                Salary = user.UserDetails.Salary,
                PensionSchemeName = pensionSchemeName

しかし、私のインデックスには

public ViewResult Index(FormCollection form)
        { 
          string[] UserIDs = form["TRSIDs"].Split(',');

var trs = db.Users
                .Include(t => t.UserDetails)
                .Include(t => t.TRS)
                .Include(t => t.Pension)
                .Where(g => UserIDs.Contains(g.UserName))
                .Select(user => new TRSViewModel
            {
                UserName = user.UserName,
                FirstName = user.UserDetails.FirstName,
                LastName = user.UserDetails.LastName,
                Salary = user.UserDetails.Salary

しかし、ビュー モデルに「PensionSchemeName」の詳細を含める方法がわかりません。- を使用して直接マッピングしてみました

PensionSchemeName = db.SchemeNames.Find(user.Pension.PensionSchemeNameID).Name,

しかし、私はそれでエラーが発生します。これを含める方法はありますか?

4

1 に答える 1

1

ユーザーとスキーム名を手動で結合することを試みることができます:

public ViewResult Index(FormCollection form)
{
    string[] UserIDs = form["TRSIDs"].Split(',');

    var trs = db.Users
        .Join(db.SchemeNames,
            user => user.Pension.PensionSchemeNameID,
            schemeName => schemeName.SchemeNameID,
            (user, schemeName) => new { User = user, SchemeName = schemeName })
        .Where(a => UserIDs.Contains(a.User.UserName))
        .Select(a => new TRSViewModel
        {
            UserName = a.User.UserName,
            FirstName = a.User.UserDetails.FirstName,
            LastName = a.User.UserDetails.LastName,
            Salary = a.User.UserDetails.Salary,
            PensionSchemeName = a.SchemeName.Name
        }
    //...
}

それ以外の場合PensionPensionSchemeName、より簡単になります:

    var trs = db.Users
        .Where(u => UserIDs.Contains(u.UserName))
        .Select(u => new TRSViewModel
        {
            UserName = u.UserName,
            FirstName = u.UserDetails.FirstName,
            LastName = u.UserDetails.LastName,
            Salary = u.UserDetails.Salary,
            PensionSchemeName = u.Pension.PensionSchemeName.Name
        }

(私は s を削除しましたInclude。射影 ( ) を使用する場合はとにかく無視されますSelect。)

于 2013-01-14T18:51:37.590 に答える