2016-05-10 5 views
1

関連データを選択するときにMVC5アプリケーション(Entity Frameworkを使用)に関するヘルプを探していますが、これは正しく動作していると思っていましたが、特定の方法でデータを選択しようとするとエラーが表示されるためです。関連データを読み込んでいるときにアプリケーションでLINQエラーが発生しています

関連するデータを格納する4つのテーブルがあります。これらは次のとおりである:

Hive1 
- ID (int, PK) 
- Name (varchar) 

Hive2 
- ID (int, PK) 
- Location (varchar) 
- Hive_ID (int) (relationship to ID of Hive 1) 

Hive3 
- ID (int, pk) 
- Propulsion (carchar) 
- Hive_ID (int) (relationship to ID of Hive 1) 

Hive4 
- ID (int, pk) 
- BHP (varchar) 
- Hive_ID (int) (relationship to ID of Hive 1) 

のでHive2、Hive3、Hive4すべてがHive1のIDにHive_IDから関係を持っています。私は関連するデータを表示しているので、私はビューモデルを作成し、私が示したかったものを宣言しました。

namespace MyProject.ViewModels 
{ 
    public class HiveViewModel 
    { 

     //Hive 1 
     public int id { get; set; } 
     public string name { get; set; } 

     //Hive 2 
     public string location { get; set; } 

     //Hive 3 
     public string propulsion { get; set; } 

     //Hive 4 
     public string bhp { get; set; } 
    } 
} 

私はこの段階でデータ

public ActionResult data_read([DataSourceRequest]DataSourceRequest request) 
{ 
     var datacontext = db.Hive1.AsQueryable(); 

     IQueryable<HiveViewModel> thevessel = from c in datacontext 
        select new HiveViewModel 
        { 
         //Hive 1 
         id = c.id, 
         name = c.name, 

         //Hive 2 
         location = c.Hive2.location, 

         //Hive 3 
         propulsion = c.Hive3.propulsion, 

         //Hive 4 
         bhp = c.Hive4.bhp             
              }; 
     DataSourceResult result = thevessel.ToDataSourceResult(request); 

     return Json(result); 
    } 

を選択するように制御コードを追加し、すべてがコンパイルされ、問題はありません。しかし、私がプロジェクトを実行し、アプリケーションがデータを読み込もうとすると、エラーが発生します。

{"The specified type member 'location' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported."} 

が、私はどのようにこのエラーまたは私が間違ってやったを解決する方法がわからないんだけど、私は上記の:(

+0

財産LOCAにそれを変更しようとしますコンストラクタ(new)を必要とするオブジェクトである可能性があります。 Hiveクラスで、場所を初期化するコンストラクタを作成します。 – jdweng

答えて

0

かかわらc.Hive2を抽出してみません明らかに、OKだった論理的に考えて。ロケーションコールなど

public ActionResult data_read([DataSourceRequest]DataSourceRequest request) 
{ 
    var datacontext = db.Hive1.AsQueryable(); 
    var loc = c.Hive2.location; 
    IQueryable<HiveViewModel> thevessel = from c in datacontext 
       select new HiveViewModel 
       { 
        //Hive 1 
        id = c.id, 
        name = c.name, 

        //Hive 2 
        location = loc, 

        //Hive 3 
        propulsion = c.Hive3.propulsion, 

        //Hive 4 
        bhp = c.Hive4.bhp             
             }; 
    DataSourceResult result = thevessel.ToDataSourceResult(request); 

    return Json(result); 
} 
0

私は100%このクエリはSQLに変換されるかどうかはわかりません。私は

public ActionResult data_read([DataSourceRequest]DataSourceRequest request){ 
    var datacontext = db.Hive1.AsQueryable(); 

    var hives = (from c in datacontext).ToList(); 

    IQueryable<HiveViewModel> thevessel = hives.ForEach(c => 
       select new HiveViewModel 
       { 
        //Hive 1 
        id = c.id, 
        name = c.name, 

        //Hive 2 
        location = c.Hive2.location, 

        //Hive 3 
        propulsion = c.Hive3.propulsion, 

        //Hive 4 
        bhp = c.Hive4.bhp             
             }); 
関連する問題