C# 实体框架查询在23个子查询后失败,需要添加更多
我有一个实体框架查询,用于将两个表中的31列输出到gridview。29列是位,因此它们显示为真或假。为了更新它以显示是或否,我在每个位列中添加了一个子查询,以便从位值为1、0或NULL的查找表中选择是、否或NULL。这适用于大约23列,之后查询不返回任何结果,gridview不加载。我可以以位的形式返回其余的列,并显示True或False,但只要我更改其中任何一个以使用子查询,查询就会失败,gridview也不会加载。我认为问题可能是命令超时或连接超时。我为命令超时添加了这个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
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。我想使用子查询来显示是/否。从逻辑上讲,我不明白为什么我被限制在网格视图不加载的子查询数量上。我很欣赏你的洞察力!谢谢在查询中使用字典给我带来了与网格视图不加载相同的问题。我认为它应该可以工作,但由于某些原因,网格视图在查询中甚至没有加载一个字典引用。您能告诉我为什么在查询中使用字典会导致网格视图无法加载吗?非常感谢你的帮助!谢谢在查询中使用字典给我带来了与网格视图不加载相同的问题。我认为它应该可以工作,但由于某些原因,网格视图在查询中甚至没有加载一个字典引用。您能告诉我为什么在查询中使用字典会导致网格视图无法加载吗?非常感谢你的帮助!谢谢真正的问题是将布尔值转换为是/否。这是最简单的方法。真正的问题是将布尔值转换为是/否。这是最简单的方法