在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上搜索这个问题,但我没有得到答案。
而且我也想知道产生这个错误的原因。
答案 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();