Foreach循环帮助c#

时间:2011-12-21 10:23:21

标签: c# .net variables loops foreach

我目前正在尝试使用变量从数据库中提取数据,然后将其传递给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;
 }

但是我无法让循​​环工作!有人可以告诉我或解释我在这里做错了吗?

3 个答案:

答案 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;
}