2つのデータベーステーブルのLinqで結合をしようとするといくつかのエラーが戻ってきた。私のデータベースには、参加者用テーブルとGender用テーブルがあります。 私は3つのモデルを使用しています - Participant、Gender、ParticipantDetailsViewModel。 (最終的には、より多くのデータ抽象化(例えば、都市の表)を可能にするために、他の参加者の詳細を切り替えたい)。私のC言語でLinqに参加しようとするとエラーが発生し、ViewModelを返す。C#MVC
参加
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace MVCManageParticipants.Models
{
public class Participant
{
public int Id { get; set; }
public int SiteId { get; set; }
public int Status { get; set; }
public int Gender { get; set; }
public string Title { get; set; }
[Required]
[StringLength(35)]
public string Name { get; set; }
public string City { get; set; }
public string Postcode { get; set; }
public string Telephone { get; set; }
public string Notes { get; set; }
}
}
性別
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace MVCManageParticipants.Models
{
public class Gender
{
public int Id { get; set; }
public string Name { get; set; }
}
}
ParticipantDetailsViewModel
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MVCManageParticipants.Models
{
public class ParticipantDetailsViewModel
{
public int Id { get; set; }
public int SiteId { get; set; }
public int Status { get; set; }
public string Title { get; set; }
public string Gender { get; set; }
public string Name { get; set; }
public string City { get; set; }
public string Country { get; set; }
public string Postcode { get; set; }
public string Telephone { get; set; }
public string Notes { get; set; }
}
}
:私は、コントローラからモデルを返すに取得し、結果ビューに次のように持っているアプリをデバッグするとき
public ActionResult Details([Bind(Prefix = "id")]int participantId = 0)
{
// Check participant exists
Participant participant = _db.Participants.Find(participantId);
if (participant == null)
{
return HttpNotFound();
}
var model = (from p in _db.Participants
join g in _db.Genders on p.Gender equals g.Id
where p.Id == participantId
select new ParticipantDetailsViewModel
{
Id = p.Id,
SiteId = p.SiteId,
Status = p.Status,
Gender = g.Name,
Title = p.Title,
Name = p.Name,
City = p.City,
Postcode = p.Postcode,
Telephone = p.Telephone,
Notes = p.Notes
});
return View(model);
}
:私は、詳細ページを処理するには、次の方法を持っているontroller私は私が持っているように、私の詳細が表示ストリップダウンしました次:
@model MVCManageParticipants.Models.ParticipantDetailsViewModel
@{ ViewBag.Title = "Details"; }
<h2>Details2</h2>
@Model.Id
@Model.Gender
そして私は、次のエラーが表示さ:
を辞書に渡されるモデル項目の型は 'System.Data.Entity.Infrastructure.DbQuery`1 [MVCManageParticipants.Models.ParticipantDetailsViewModel]'ですが、この辞書には 'MVCManageParticipants.Models.ParticipantDetailsViewModel'型のモデル項目が必要です。
問題がどのようなものであり、どのように修正するかについて、紛失しました。
あなたのケースの 'model'は、ビューが1つだけのオブジェクトを期待している間に複数のエンティティモデルとして。 'return View(model.FirstOrDefault);'を試してください。 –
小さなメモです。私はEFがあなたが自動的にそれらをやるのを助けるように特別に設計されたときに人が手動でジョインをするのを見ています。あなたの '参加者'に 'public Gender Gender {get; set;}'を単に置くことができます。コンテキストが正しく設定されていれば、それにアクセスするだけでEFがあなたのために参加することができます。だから投影では 'Gender = p.Gender.Name'だけで、参加についてのことはすべて忘れてしまいます。 –
@AlexPavenあなたはこれをさらに詳しく説明するリソースを提供できますか?まだこのメソッドを使用していますが、性別フィールドは空です。 – jonnow