3

asp.net での Web アプリケーションの開発中に次のエラーに直面しています。
タイプ <>f__AnonymousType0 1[System.Collections.Generic.IEnumerable1[clsDAL.AnsType]]' と 'clsDAL.AnsType' の間で強制演算子が定義されていません。

このエラーは、LInqToSQLを使用してデータベースからデータを取得しているときに発生します。このエラーが発生する関数は以下のとおりです。

public static IList<AnsType> GetAnswer(int id)
{            
    var TempAns = GlobalClass.DBContext.tbQueAns.Where(s => s.QueId == id).Select(s => s.AnsVal).ToList();
    var TAns = GlobalClass.DBContext.tbQueOptions.Where(s=>s.QueId == id).Join(GlobalClass.DBContext.tbQueAns, x => x.OptionId, s => s.AnsVal, (a, b) => new { ans = a.OptionVal });
    List<AnsType> Ans = TAns.Cast<AnsType>().ToList();
    return Ans;
} 

そして、AnsTypeのは以下のようになります...

public class AnsType
{
    public string AnsVal { get; set; }
}

正確に何が起こっているのか理解できませんでした.Googleでこの問題を検索しようとしましたが、答えが得られませんでした.
また、このエラーが発生する理由も知りたいです。

4

1 に答える 1

4

これはうまくいくはずです:

  var TAns = GlobalClass.DBContext
             .tbQueOptions.Where(s=>s.QueId == id)
             .Join(GlobalClass.DBContext.tbQueAns, 
                   x => x.OptionId, 
                   s => s.AnsVal, 
                  (a, b) => new AnsType() { AnsVal = a.OptionVal }).ToList();

return TAns;  

これが発生する理由は、implicitly匿名型をキャストしようとしていて、それができないためです。

頭韻を踏むと、次のように変換演算子を指定できます。

       public class AnsType
        {
            public string AnsVal { get; set; }
            public static implicit operator AnsType(string val)
            {
                AnsType t = new AnsType();
                t.AnsVal = val;
                return t;
            }
        }  

そして、次のように使用します。List<AnsType> Ans = TAns.Select(x=>x.ans).Cast<AnsType>().ToList();

于 2012-12-02T08:29:02.850 に答える