LINQ to SQL效率

时间:2014-02-10 18:10:51

标签: c# asp.net linq-to-sql

我是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();
}

2 个答案:

答案 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();

            }                
        }
    }