我目前正在尝试使用变量从数据库中提取数据,然后将其传递给foreach循环,以确定是否应该根据值显示按钮。
到目前为止,我有这个:
var Inter = from x in db.DT_Interviews where x.ClientID == int.Parse(ViewState["ClientID"].ToString()) && x.ClientID == CID select x;
foreach(var c in Inter)
{
if (c.InterviewDone == true)
BTI.Visible = false;
else
BTI.Visible = true;
}
但是我无法让循环工作!有人可以告诉我或解释我在这里做错了吗?
答案 0 :(得分:1)
如果您尝试显示BTI,如果任何访谈与视图状态客户端ID相关联并且InterviewDone标志为true,则可以使用:
int clientID = int.Parse(ViewState["ClientID"].ToString());
BTI.Visible = db.DT_Interviews.Any(x => x.ClientID == clientID && x.InterviewDone);
但为什么你需要检查ClientID是否与视图状态AND CID中的ClientID相同?
答案 1 :(得分:0)
你的代码在几个地方都很奇怪:
var Inter =
from x in db.DT_Interviews
where x.ClientID == int.Parse(ViewState["ClientID"].ToString()) && x.ClientID == CID
select x;
您确定您的查询会返回任何结果吗? CID的价值是多少?
foreach(var c in Inter)
{
if (c.InterviewDone == true)
BTI.Visible = false;
else
BTI.Visible = true;
}
}
我不确定你在这里干什么? BTI将显示或不依赖于查询中的 last 元素。那么,为什么要遍历整个内容呢?
答案 2 :(得分:0)
首先,为什么有一个foreach只设置2个场景,即将某个对象的可见性设置为false或true。想象一下,如果您的Inter有5个bool值,那么对象的可见性取决于Inter中的最后一个值,因为它将继续循环直到它达到最后一个值。不是吗试试这段代码:
在这里,一旦找到第一个值,我就会在Inter获得一个bool值。
var Inter = (from x in db.DT_Interviews
where x.ClientID == int.Parse(ViewState["ClientID"].ToString()) && x.ClientID == CID
select x.InterviewDone).FirstOrDefault();
if(Inter)
{
BTI.Visible = false;
}
else
{
BTI.Visible = true;
}