我是LINQ的新手,我有一个关于“一次点击数据库”类型的交易的问题。
在下面的代码中,我将查询结果数据绑定到无线电列表。我想运行一次查询,然后在数据绑定之前使用结果。 IE:如果有值,数据绑定到Radio列表,否则显示一个文本框,说明没有值。
从我的在线搜索中我发现我可以使用.count()运行一次查询,然后如果.count()是>则再次运行它。 0
我更喜欢点击一次数据库,然后计算记录,然后继续使用相同的结果集。
我不确定搜索时使用的术语,所以请使用适当的术语来回复,以便我可以自己找到答案!
using (RTOExceptionDataContext thisDataContext = new RTOExceptionDataContext())
{
rdoSelectTransition.DataSource = from tracking in thisDataContext.vw_RTOExceptionWorkflowTransitionMaps
where tracking.RTOExceptionId.Equals(Convert.ToInt32(Request.QueryString["RTOExceptionId"])) &&
tracking.RTOSecurityLevel.Equals((int)Master.thisUserSecurityLevel)
select new { tracking.RTOTransitionCd, tracking.TransitionDisp };
rdoSelectTransition.DataTextField = "TransitionDisp";
rdoSelectTransition.DataValueField = "RTOTransitionCd";
rdoSelectTransition.DataBind();
}
答案 0 :(得分:2)
根本不需要这样做。只需保持您的绑定代码完全不变,并使用<EmptyDataTemplate>
标记内的GridView
来指示在将空集合绑定到GridView
时应显示的内容。
如果您将数据绑定到不支持此类功能的控件类型,那么最简单的选择就是将查询急切地实现到集合中,然后获取其中的大小-memory collection。
var data = (from tracking in thisDataContext.vw_RTOExceptionWorkflowTransitionMaps
where tracking.RTOExceptionId.Equals(Convert.ToInt32(Request.QueryString["RTOExceptionId"])) &&
tracking.RTOSecurityLevel.Equals((int)Master.thisUserSecurityLevel)
select new { tracking.RTOTransitionCd, tracking.TransitionDisp })
.ToList();
if(data.Any())
//databind
else
//do something else
答案 1 :(得分:0)
我确实找到了问题的答案!我每天都在学习LINQ,我真的很喜欢它!如果有结果,这允许我进行数据绑定。虽然下面没有显示“else”,但它将单选按钮的可见性设置为false。
int thisUserSecurityLevel = (int)Master.thisUserSecurityLevel;
int thisUserSelectedException = Convert.ToInt32(Request.QueryString["RTOExceptionId"]);
using (RTOExceptionDataContext thisDataContext = new RTOExceptionDataContext())
{
var query = from tracking in thisDataContext.vw_RTOExceptionWorkflowTransitionMaps
where tracking.RTOExceptionId.Equals(thisUserSelectedException) &&
tracking.RTOSecurityLevel.Equals(thisUserSecurityLevel)
select new { tracking.RTOTransitionCd, tracking.TransitionDisp };
if (query.Count() > 0)
{
rdoSelectTransition.DataSource = query;
rdoSelectTransition.DataTextField = "TransitionDisp";
rdoSelectTransition.DataValueField = "RTOTransitionCd";
rdoSelectTransition.DataBind();
}
}
}