MVCでWeb APIを作成しています。データベースは(これまでのところ)シンプルで、3つのテーブルしかありません。私は彼らに参加することはできません。である、私は、コントローラ内のテーブルを結合するための3つの異なる方法を試してみた、すべてが同じエラーを返す:'Systems.Collections.Generic.IEnumerables <>'を修正する方法説明変換が存在します。あなたはキャストを逃していますか?
秘密のタイプ(何か*)することはできません 「はSystems.Collections.Generic.IEnumerables < SalesDbApiに。 Sample> ' Explicit変換が存在します。あなたはキャストを逃していますか?
は(*「何か」の部分はは、参加方法に応じて異なる場合に発生しますが、メッセージの残りの部分は同じままなので、私はそれが関連する部分であると仮定しています。)
私は推測しています
{"SampleId":10,"Barcode":"863760","CreatedAt":"2016-01-25T00:00:00","CreatedBy":10,"StatusID":3,"User":null,"Status":null}
ユーザーとステータス上がらない:私はしていない場合は参加して、ちょうどすべて私が戻って、次のJSONを取得するサンプルから選択を行うにはので、私は、セットアップのLINQの私のエンティティの関係を、持っているかと間違って何かがありますSampleテーブルのフィールドに入力します。彼らは私がリンクしようとしているテーブルの名前なので、それらが出現するとは思わないでしょう。
私が間違っていたことはありますか?ここでは、コントローラからのコードですStatuses.cs
namespace SalesDbApi
{
using System;
using System.Collections.Generic;
public partial class Status
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Status()
{
this.Samples = new HashSet<Sample>();
}
public int StatusId { get; set; }
public string Status1 { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Sample> Samples { get; set; }
}
}
Samples.cs
namespace SalesDbApi
{
using System;
using System.Collections.Generic;
public partial class Sample
{
public int SampleId { get; set; }
public string Barcode { get; set; }
public Nullable<System.DateTime> CreatedAt { get; set; }
public int CreatedBy { get; set; }
public int StatusID { get; set; }
public virtual User User { get; set; }
public virtual Status Status { get; set; }
}
}
Users.cs
namespace SalesDbApi
{
using System;
using System.Collections.Generic;
public partial class User
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public User()
{
this.Samples = new HashSet<Sample>();
}
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Sample> Samples { get; set; }
}
}
:ここ
は私の3つのモデルです
SalesUsersController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using SalesDbApi;
namespace SalesProject.Controllers
{
public class SalesUsersController : ApiController
{
webapitestdbEntities1 db = new webapitestdbEntities1();
public IEnumerable<Sample> Get()
{
{
db.Configuration.ProxyCreationEnabled = false;
var query = from x in db.Samples
join q in db.Users
on x.CreatedBy equals q.UserId
select q.FirstName;
return query.ToList();
}
}
あなたの質問は、 'Sample'ではなく' User'の 'FirstName'プロパティだけを選択しています。なぜ' join'が必要なのかは不明ですが、 'select x'(' select q.FirstName'ではなく) 'Sample'のコレクションを返すだけの場合は' User'の他のプロパティを返す場合は、それらのプロパティを含むビューモデルに結果を投影する必要があります。 –
私はいくつかのフィールドを選択しようとしましたが、結合されたテーブルから引っ張られているので、一見同じようにエラーが発生しました。 xを選択しようとすると、上記の結果({"SampleId":10、 "Barcode": "123"、 "CreatedAt": "2016-01-25T00:00:00"、 "CreatedBy":10、これらのフィールドのすべては、ユーザーとステータスを除いてサンプル・テーブルから取得されます。ユーザーおよびステータスは、どの表のフィールドでもありません。それらは、sample.csモデルのパブリック仮想クラスとして設定された他のテーブルへの参照です。 public virtual User User {get;セット; } public virtualステータスステータス{get;セット; } – David
私の最初のコメントをもう一度読んでください。複数のテーブルのフィールドが必要な場合は、 'Sample'のコレクションを返すことはできません - 必要なプロパティを含むモデルのコレクションを返す必要があります - '新しいMyModel {SampleId = x .SampleId、FirstName = q.FirstName、.....} ' –