C# 实体框架查询在23个子查询后失败,需要添加更多

C# 实体框架查询在23个子查询后失败,需要添加更多,c#,entity-framework,tsql,gridview,C#,Entity Framework,Tsql,Gridview,我有一个实体框架查询,用于将两个表中的31列输出到gridview。29列是位,因此它们显示为真或假。为了更新它以显示是或否,我在每个位列中添加了一个子查询,以便从位值为1、0或NULL的查找表中选择是、否或NULL。这适用于大约23列,之后查询不返回任何结果,gridview不加载。我可以以位的形式返回其余的列,并显示True或False,但只要我更改其中任何一个以使用子查询,查询就会失败,gridview也不会加载。我认为问题可能是命令超时或连接超时。我为命令超时添加了这个 db.Datab

我有一个实体框架查询,用于将两个表中的31列输出到gridview。29列是位,因此它们显示为真或假。为了更新它以显示是或否,我在每个位列中添加了一个子查询,以便从位值为1、0或NULL的查找表中选择是、否或NULL。这适用于大约23列,之后查询不返回任何结果,gridview不加载。我可以以位的形式返回其余的列,并显示True或False,但只要我更改其中任何一个以使用子查询,查询就会失败,gridview也不会加载。我认为问题可能是命令超时或连接超时。我为命令超时添加了这个

db.Database.CommandTimeout = 3000; db.Configuration.AutoDetectChangesEnabled = false;
我在web.config中添加了以下内容:

还是没什么用。这可能是内存或缓存问题吗?这是一个问题

using (var db = new EthicsEntities())
{
    db.Database.CommandTimeout = 3000;
    //db.Configuration.LazyLoadingEnabled = true;
    db.Configuration.AutoDetectChangesEnabled = false;

    string sstartyear = Convert.ToString(startyear);
    string eendyear = Convert.ToString(endyear);
    var questrpt = (from f in db.FDS
                    join q in db.Questions
                    on f.FDS_Num equals q.FDS_Num
                    where f.Filed_Year >= startyear
                    && f.Filed_Year <= endyear
                    orderby f.Filed_Year, f.FDS_Num          

                    select new 
                    {
                        fdsnum = q.FDS_Num,
                        yearr = f.Filed_Year,
                        //rQ01 = q.Q1,
                        rQ01 = (from y in db.YesNoes where y.YN_Bit == q.Q1 select y.YN_Value).FirstOrDefault(),
                        //rQ02 = q.Q2,
                        rQ02 = (from y in db.YesNoes where y.YN_Bit == q.Q2 select y.YN_Value).FirstOrDefault(),
                        //rQ03 = q.Q3,
                        rQ03 = (from y in db.YesNoes where y.YN_Bit == q.Q3 select y.YN_Value).FirstOrDefault(),
                        //rQ04 = q.Q4,
                        rQ04 = (from y in db.YesNoes where y.YN_Bit == q.Q4 select y.YN_Value).FirstOrDefault(),
                        //rQ05 = q.Q5,
                        rQ05 = (from y in db.YesNoes where y.YN_Bit == q.Q5 select y.YN_Value).FirstOrDefault(),
                        //rQ06 = q.Q6,
                        rQ06 = (from y in db.YesNoes where y.YN_Bit == q.Q6 select y.YN_Value).FirstOrDefault(),
                        //rQ07 = q.Q7,
                        rQ07 = (from y in db.YesNoes where y.YN_Bit == q.Q7 select y.YN_Value).FirstOrDefault(),
                        //rQ08 = q.Q8,
                        rQ08 = (from y in db.YesNoes where y.YN_Bit == q.Q8 select y.YN_Value).FirstOrDefault(),
                        //rQ09 = q.Q9,
                        rQ09 = (from y in db.YesNoes where y.YN_Bit == q.Q9 select y.YN_Value).FirstOrDefault(),
                        //rQ10 = q.Q10,
                        rQ10 = (from y in db.YesNoes where y.YN_Bit == q.Q10 select y.YN_Value).FirstOrDefault(),
                        //rQ11 = q.Q11,
                        rQ11 = (from y in db.YesNoes where y.YN_Bit == q.Q11 select y.YN_Value).FirstOrDefault(),
                        //rQ12 = q.Q12,
                        rQ12 = (from y in db.YesNoes where y.YN_Bit == q.Q12 select y.YN_Value).FirstOrDefault(),
                        //rQ13 = q.Q13,
                        rQ13 = (from y in db.YesNoes where y.YN_Bit == q.Q13 select y.YN_Value).FirstOrDefault(),
                        //rQ14 = q.Q14,
                        rQ14 = (from y in db.YesNoes where y.YN_Bit == q.Q14 select y.YN_Value).FirstOrDefault(),
                        //rQ15 = q.Q15,
                        rQ15 = (from y in db.YesNoes where y.YN_Bit == q.Q15 select y.YN_Value).FirstOrDefault(),
                        //rQ16 = q.Q16,
                        rQ16 = (from y in db.YesNoes where y.YN_Bit == q.Q16 select y.YN_Value).FirstOrDefault(),
                        //rQ17 = q.Q17,
                        rQ17 = (from y in db.YesNoes where y.YN_Bit == q.Q17 select y.YN_Value).FirstOrDefault(),
                         //rQ18 = q.Q18,
                         rQ18 = (from y in db.YesNoes where y.YN_Bit == q.Q18 select y.YN_Value).FirstOrDefault(),
                         //rQ19 = q.Q19,
                         rQ19 = (from y in db.YesNoes where y.YN_Bit == q.Q19 select y.YN_Value).FirstOrDefault(),
                         //rQ20 = q.Q20,
                         rQ20 = (from y in db.YesNoes where y.YN_Bit == q.Q20 select y.YN_Value).FirstOrDefault(),
                         rQ21 = q.Q21,
                         //rQ21 = (from y in db.YesNoes where y.YN_Bit == q.Q21 select y.YN_Value).FirstOrDefault(),
                         rQ22 = q.Q22,
                         //rQ22 = (from y in db.YesNoes where y.YN_Bit == q.Q22 select y.YN_Value).FirstOrDefault(),
                         rQ23 = q.Q23,
                         //rQ23 = (from y in db.YesNoes where y.YN_Bit == q.Q23 select y.YN_Value).FirstOrDefault(),
                         rQ24 = q.Q24,
                         //rQ24 = (from y in db.YesNoes where y.YN_Bit == q.Q24 select y.YN_Value).FirstOrDefault(),
                         rQ25 = q.Q25,
                         //rQ25 = (from y in db.YesNoes where y.YN_Bit == q.Q25 select y.YN_Value).FirstOrDefault(),
                         rQ26 = q.Q26,
                         //rQ26 = (from y in db.YesNoes where y.YN_Bit == q.Q26 select y.YN_Value).FirstOrDefault(),
                         //rQ27 = q.Q27,
                         rQ27 = (from y in db.YesNoes where y.YN_Bit == q.Q27 select y.YN_Value).FirstOrDefault(),
                         //rQ28 = q.Q28,
                         rQ28 = (from y in db.YesNoes where y.YN_Bit == q.Q28 select y.YN_Value).FirstOrDefault(),
                         //rQ29 = q.Q29
                         rQ29 = (from y in db.YesNoes where y.YN_Bit == q.Q29 select y.YN_Value).FirstOrDefault()
                     }).ToList();

    grdQuestions.DataSource = questrpt;
    grdQuestions.DataBind();
    grdQuestions.HeaderRow.TableSection = TableRowSection.TableHeader;
}

在这种情况下,您应该在客户端执行一些查询处理。IE将YesNos提取到本地词典中,并在客户端上进行最终选择。大概是这样的:

var questrpt =  from f in db.FDS
                join q in db.Questions
                on f.FDS_Num equals q.FDS_Num
                where f.Filed_Year >= startyear
                && f.Filed_Year <= endyear
                orderby f.Filed_Year, f.FDS_Num
                select new {fds=f, question=q};

var yn = from y in db.YesNos
            select new (y.YN_Bit,y.YN_Value);

var ynByBit = yn.ToDictionary(y => y.YN_Bit, y => YN_Value);

var result = from q in questrpt.ToList()
                select new 
                (
                    fds.FDS_Num,
                    yearr = fds.Filled_Year,
                    rQ01 = ynByBit[q.Q1],
                    rQ02 = ynByBit[q.Q2],
                    rQ03 = ynByBit[q.Q3],
                    //. . .
                );

在这种情况下,您应该在客户端执行一些查询处理。IE将YesNos提取到本地词典中,并在客户端上进行最终选择。大概是这样的:

var questrpt =  from f in db.FDS
                join q in db.Questions
                on f.FDS_Num equals q.FDS_Num
                where f.Filed_Year >= startyear
                && f.Filed_Year <= endyear
                orderby f.Filed_Year, f.FDS_Num
                select new {fds=f, question=q};

var yn = from y in db.YesNos
            select new (y.YN_Bit,y.YN_Value);

var ynByBit = yn.ToDictionary(y => y.YN_Bit, y => YN_Value);

var result = from q in questrpt.ToList()
                select new 
                (
                    fds.FDS_Num,
                    yearr = fds.Filled_Year,
                    rQ01 = ynByBit[q.Q1],
                    rQ02 = ynByBit[q.Q2],
                    rQ03 = ynByBit[q.Q3],
                    //. . .
                );

这就是对我有效的解决方案。谢谢大家!任何问题,请随时提问

                                    rQ01 = (q.Q1 == true) ? "Yes" : "No",
                                    rQ02 = (q.Q2 == true) ? "Yes" : "No",
                                    rQ03 = (q.Q3 == true) ? "Yes" : "No",
                                    rQ04 = (q.Q4 == true) ? "Yes" : "No",
                                    rQ05 = (q.Q5 == true) ? "Yes" : "No",
                                    rQ06 = (q.Q6 == true) ? "Yes" : "No",
                                    rQ07 = (q.Q7 == true) ? "Yes" : "No",
                                    rQ08 = (q.Q8 == true) ? "Yes" : "No",
                                    rQ09 = (q.Q9 == true) ? "Yes" : "No",
                                    rQ10 = (q.Q10 == true) ? "Yes" : "No",
                                    rQ11 = (q.Q11 == true) ? "Yes" : "No",
                                    rQ12 = (q.Q12 == true) ? "Yes" : "No",
                                    rQ13 = (q.Q13 == true) ? "Yes" : "No",
                                    rQ14 = (q.Q14 == true) ? "Yes" : "No",
                                    rQ15 = (q.Q15 == true) ? "Yes" : "No",
                                    rQ16 = (q.Q16 == true) ? "Yes" : "No",
                                    rQ17 = (q.Q17 == true) ? "Yes" : "No",
                                    rQ18 = (q.Q18 == true) ? "Yes" : "No",
                                    rQ19 = (q.Q19 == true) ? "Yes" : "No",
                                    rQ20 = (q.Q20 == true) ? "Yes" : "No",
                                    rQ21 = (q.Q21 == true) ? "Yes" : "No",
                                    rQ22 = (q.Q22 == true) ? "Yes" : "No",
                                    rQ23 = (q.Q23 == true) ? "Yes" : "No",
                                    rQ24 = (q.Q24 == true) ? "Yes" : "No",
                                    rQ25 = (q.Q25 == true) ? "Yes" : "No",
                                    rQ26 = (q.Q26 == true) ? "Yes" : "No",
                                    rQ27 = (q.Q27 == true) ? "Yes" : "No",
                                    rQ28 = (q.Q28 == true) ? "Yes" : "No",
                                    rQ29 = (q.Q29 == true) ? "Yes" : "No"

这就是对我有效的解决方案。谢谢大家!任何问题,请随时提问

                                    rQ01 = (q.Q1 == true) ? "Yes" : "No",
                                    rQ02 = (q.Q2 == true) ? "Yes" : "No",
                                    rQ03 = (q.Q3 == true) ? "Yes" : "No",
                                    rQ04 = (q.Q4 == true) ? "Yes" : "No",
                                    rQ05 = (q.Q5 == true) ? "Yes" : "No",
                                    rQ06 = (q.Q6 == true) ? "Yes" : "No",
                                    rQ07 = (q.Q7 == true) ? "Yes" : "No",
                                    rQ08 = (q.Q8 == true) ? "Yes" : "No",
                                    rQ09 = (q.Q9 == true) ? "Yes" : "No",
                                    rQ10 = (q.Q10 == true) ? "Yes" : "No",
                                    rQ11 = (q.Q11 == true) ? "Yes" : "No",
                                    rQ12 = (q.Q12 == true) ? "Yes" : "No",
                                    rQ13 = (q.Q13 == true) ? "Yes" : "No",
                                    rQ14 = (q.Q14 == true) ? "Yes" : "No",
                                    rQ15 = (q.Q15 == true) ? "Yes" : "No",
                                    rQ16 = (q.Q16 == true) ? "Yes" : "No",
                                    rQ17 = (q.Q17 == true) ? "Yes" : "No",
                                    rQ18 = (q.Q18 == true) ? "Yes" : "No",
                                    rQ19 = (q.Q19 == true) ? "Yes" : "No",
                                    rQ20 = (q.Q20 == true) ? "Yes" : "No",
                                    rQ21 = (q.Q21 == true) ? "Yes" : "No",
                                    rQ22 = (q.Q22 == true) ? "Yes" : "No",
                                    rQ23 = (q.Q23 == true) ? "Yes" : "No",
                                    rQ24 = (q.Q24 == true) ? "Yes" : "No",
                                    rQ25 = (q.Q25 == true) ? "Yes" : "No",
                                    rQ26 = (q.Q26 == true) ? "Yes" : "No",
                                    rQ27 = (q.Q27 == true) ? "Yes" : "No",
                                    rQ28 = (q.Q28 == true) ? "Yes" : "No",
                                    rQ29 = (q.Q29 == true) ? "Yes" : "No"

你有没有想过这不是一个好方法?是的,我创造了一个方法来接受布尔?并返回字符串Yes或No,但它在实体查询中不起作用。您能建议一种更好的方法将真/假转换为是/否吗?查询失败-它是如何失败的?你看到任何异常消息了吗?没有异常,也许我用词不对。如果再添加一个子查询,则不会加载网格视图。如果不使用子查询,网格视图将加载并显示True/False。我想使用子查询来显示是/否。从逻辑上讲,我不明白为什么我被限制在网格视图不加载的子查询数量上。我很欣赏你的洞察力!谢谢你有没有想过这不是一个好方法?是的,我创造了一个方法来接受布尔?并返回字符串Yes或No,但它在实体查询中不起作用。您能建议一种更好的方法将真/假转换为是/否吗?查询失败-它是如何失败的?你看到任何异常消息了吗?没有异常,也许我用词不对。如果再添加一个子查询,则不会加载网格视图。如果不使用子查询,网格视图将加载并显示True/False。我想使用子查询来显示是/否。从逻辑上讲,我不明白为什么我被限制在网格视图不加载的子查询数量上。我很欣赏你的洞察力!谢谢在查询中使用字典给我带来了与网格视图不加载相同的问题。我认为它应该可以工作,但由于某些原因,网格视图在查询中甚至没有加载一个字典引用。您能告诉我为什么在查询中使用字典会导致网格视图无法加载吗?非常感谢你的帮助!谢谢在查询中使用字典给我带来了与网格视图不加载相同的问题。我认为它应该可以工作,但由于某些原因,网格视图在查询中甚至没有加载一个字典引用。您能告诉我为什么在查询中使用字典会导致网格视图无法加载吗?非常感谢你的帮助!谢谢真正的问题是将布尔值转换为是/否。这是最简单的方法。真正的问题是将布尔值转换为是/否。这是最简单的方法