应用“强制算子”时出错

时间:2012-12-02 05:54:47

标签: asp.net list c#-4.0 linq-to-sql join

在asp.net中进行Web应用程序开发时,我遇到了错误
类型之间未定义强制运算符<> f__AnonymousType0 1[System.Collections.Generic.IEnumerable 1 [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上搜索这个问题,但我没有得到答案。
而且我也想知道产生这个错误的原因。

1 个答案:

答案 0 :(得分: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施放匿名类型而你不能这样做。

Alliteratively,您可以指定一个转换运算符,如下所示:

       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();