0

エラーが発生しました: エンティティ フレームワーク wcf を使用しています。

Error:cannot implicitly convert type System.linq.iorderedQueryable<xDataModel.Info> to System.Collection.Generic.List<xServiceLibrary.Info>

以下は私のコードです:


WCF サービス:

namespace xServiceLibrary
{
    public List<Info> GetScenario()
            {
                xEntities db = new xEntities();
                 var query = from qinfo in db.Infoes
                                select qinfo;

                  //return query.Cast<Info>().ToList(); (not working)
                  //return query.toList(); (not working)
                    return query;
       }
}

インターフェース:

namespace xServiceLibrary
{
     [OperationContract]
            List<Info> GetScenario();
}

クラス:

namespace xServiceLibrary
{
       [DataContract]
        public class Info
        {
            [DataMember]
            public int Scenario_Id;

            [DataMember]
            public string Scenario_Name { get; set; } 

            [DataMember]
            public string Company_Name { get; set; } 
        }
}

更新:(2) 2 つのクラス ライブラリ ファイルがあります。1 つは、xmodel.edmx ファイルを作成した xDataModel 名前空間です。2 番目は、Wcf サービスを実装している xServiceLibrary 名前空間です。EF モデルをクエリできるように、xServiceLibrary に xDataModel.dll ファイルを添付しました。

私は概念を理解することができません。任意の助けをいただければ幸いです。

4

2 に答える 2

1

問題は、Info: DataModel.InfoServiceLibrary.Info- という名前の 2 つの異なる型があることです。これらは異なる型であるため、一方を他方にキャストすることはできません。

両方がそこにある強い理由がない場合は、どちらかを削除します。それ以外の場合、回避策として、関連するプロパティを 1 つずつコピーしてDataModel.Info投影できます。ServiceLibrary.Info

var results = (from qinfo in db.Infoes
               select new ServiceLibrary.Info()
               {
                    Scenario_Id = qinfo.Scenario_Id,
                    //and so on
               }).ToList();
于 2012-04-23T21:47:10.830 に答える
0

問題は、2 つの異なるクラスがあり、どちらも という名前Infoで、クエリを実行した時点で両方ともスコープ内にあることです。これは非常に悪いことです。特に、2 人が同じクラスだと思っていた場合はなおさらです。

DataModel.Infoとが同じクラスである場合ServiceLibrary.Info、両方が同時にスコープ内にある理由を理解し、それを修正する必要があります。

それらが異なるクラスである場合は、どちらを返そうとしているのかを明示する必要があります。EF モデルに一連のオブジェクトが含まれていると仮定すると、DataModel.Info次のオプションがあります。

  1. List<DataModel.Info>を呼び出して取得できるa を返しますquery.ToList()
  2. オブジェクトList<ServiceLibrary.Info>からフィールドをコピーして取得できる を 返します。DataModel.Info

    var query = from qinfo in db.Info
            select new ServiceLibrary.Info
            {
              Scenario_Id = q.Scenario_Id,
              Scenario_Name = q.Scenario_Name
              Company_Name = q.Company_Name
            };
    
  3. #2 と似ていますが、必要な特定のフィールドのみを使用して、カスタム DTO オブジェクトなどの何かを返します (たとえば、ServiceLibrary.Info渡したくない重いオブジェクトである場合)。

ただし、一般に、問題はコンパイラが解釈List<Info>していてList<ServiceLibrary.Info>、おそらくそれを望んでいないという事実に集中しています。

于 2012-04-23T21:50:41.580 に答える