隐式转换类型
Posted
技术标签:
【中文标题】隐式转换类型【英文标题】:Implicitly Convert Type 【发布时间】:2013-07-09 05:30:47 【问题描述】:我在 WPF 中这样做,我正在使用实体框架。
这是我的 CRUD 类文件中的查询代码:
public class QuestionHint
public int? QuestionNo get; set; //change the type accordingly
public int? ActivityID get; set; //change the type accordingly
public int? TaskID get; set; //change the type accordingly
public string Answer get; set; //change the type accordingly
public string QuestionContent get; set; //change the type accordingly
public string joined get; set; //change the type accordingly
public string joinOption get; set; //change the type accordingly
public IList<QuestionHint> GetListKeys(int listTask, int listActivity)
IList<QuestionHint> lstRecords = context.questionhints.GroupBy(x => new x.QuestionNo, x.ActivityID, x.TaskID ).ToList().Select(g => new QuestionHint()
QuestionNo = g.Key.QuestionNo,
ActivityID = g.Key.ActivityID,
TaskID = g.Key.TaskID,
joined = String.Join(" ",
g.OrderBy(q => q.questionhintID)
.Select(i => i.QuestionContent + "[" + i.Answer + "]")),
joinOption = String.Join(" ",
g.OrderBy(q => q.questionhintID)
.Select(a => "[" + a.Option1 + "," + a.Option2 + "]"))
).Where(x => x.TaskID == listTask && x.ActivityID == listActivity)
//.Take(50)
.ToList();
return lstRecords;
我在后面的代码中称之为:
private DAO.DAOQuestionHint qh = new DAO.DAOQuestionHint();
public MainWindow2()
InitializeComponent();
PopulateQuestion(1, 5);
private void PopulateQuestion(int activityID, int taskID)
IList<QuestionHint> lstQuestionHints = qh.GetListKeys(taskID, activityID); // ERROR
//codes here...
我的 xaml.cs 后面的代码中出现此错误:
不能 'System.Collections.Generic.IList' 到“System.Collections.Generic.IList”。一个 存在显式转换(您是否缺少演员表?)
iStellar 是项目的名称。 DAOQuestionHint 是 CRUD 类文件的名称。
CRUD类文件没有错误,我使用相同的查询检索另一个项目中的记录,它运行良好,不知道为什么它在这里不起作用。
【问题讨论】:
我不明白..你的返回类型是IList<QuestionHint>
,你的变量是IList<Model.questionhint>
...它们似乎不兼容
您应该返回IEnumerable<T>
(或至少ICollection<T>
),除非您需要真正通过索引访问项目。而且,即使那样......你也可以在接收项目枚举的代码部分中调用ToList()
。不建议将List<T>
,甚至IList<T>
作为返回值。
而且,您的 LINQ 函数没有意义...您正在对新的匿名对象执行 GroupBy
...它们中的任何一个都不会被分组。然后,你ToList()
之后就没有必要了。您真正需要的只是首先执行Where()
语句,然后执行Select()
语句...这是最有效的方法。
但是当我尝试检索记录并将它们显示在其他 Web 项目的网格视图中时它可以工作。我试图将 QuestionHint 更改为 Model.questionhint ,它给了我很多错误。
【参考方案1】:
您在每个示例中对通用参数使用不同的大小写 - IList<QuestionHint>
中的 GetListKeys()
和 IList<Model.questionhint>
中的 PopulateQuestion()
。我猜这些是指名称相似但不同的类型。
【讨论】:
我注意到了,但我不能写 QuestionHint 而不是 Model.questionHint @user2376998 如果 QuestionHint 位于名为“Model”的命名空间中,那很好,但它必须是Model.QuestionHint
,而不是 Model.questionhint
。如果您右键单击每个并单击“转到定义”,它们会转到同一个地方吗?
我看错了 QuestionHint ,它实际上是一个单独的类,请参阅上面的编辑。以上是关于隐式转换类型的主要内容,如果未能解决你的问题,请参考以下文章