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; }
}

我不明白到底发生了什么,我也尝试在谷歌上搜索这个问题,但我没有得到答案。
我也想知道产生这个错误的原因。

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 回答