gpt4 book ai didi

c# - Webmatrix 检查项目是否在集合中,返回 bool 值

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:31 25 4
gpt4 key购买 nike

   @{ 
Layout = "~/_SiteLayout.cshtml";
Page.Title = "Training";
var positionID = "";
positionID = Request.QueryString["ID"];
var db = Database.Open("Training");
var courselist = db.Query("SELECT title, ID FROM courses");
var selectedCourses = db.Query("SELECT course_id from positioncourses WHERE position_id = @0", positionID);
}
<h1>Select or deselect courses for this position:</h1>
@foreach(var item in courselist){
<label for="courseID">
<input type="checkbox" name="courseID" value="@item.id" checked="@(selectedCourses.Contains(item.ID))" /> @item.title

</label>
}

上面的代码块导致:

“编译器错误消息:CS1973:“System.Collections.Generic.IEnumerable”没有名为“Contains”的适用方法,但似乎有一个名为“Contains”的扩展方法。扩展方法无法动态调度。考虑转换动态参数或者在没有扩展方法语法的情况下调用扩展方法。”

是什么导致了错误?我不够先进,无法从错误消息本身破译。

最佳答案

错误是因为Query方法返回的是一个动态类型的集合,不能在dynamic上使用扩展方法。您必须在编译时将动态类型转换为强类型。以下应该有效:

    // as before
var courselist = db.Query("SELECT title, ID FROM courses");
var selectedCourses = db.Query("SELECT course_id from positioncourses WHERE position_id = @0", positionID).Select(c => (int)c.course_id);
}
<h1>Select or deselect courses for this position:</h1>
@foreach(var item in courselist.Select(i => (int)i.ID)){
<label for="courseID">
<input type="checkbox" name="courseID" value="@item.id" checked="@(selectedCourses.Contains(item))" /> @courselist.First(c => c.ID == item).title
</label>
}

注意转换为 int转换 selectedCourses来自 IEnumerable<dynamic>IEnumerable<int>并再次将 IDs 分开在courselist来自 title这样你就可以比较intsints .

关于c# - Webmatrix 检查项目是否在集合中,返回 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19668344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com