【发布时间】:2017-08-11 13:19:39
【问题描述】:
运行此代码时,会出现这样的 stackoverflow 异常
“System.StackOverflowException”类型的未处理异常 发生在 mscorlib.dll 中
private IQueryable<KontratMasraflari> SKontratMasraflari()
{
var _kontratlar = SKontrat().ToList();//IQueryable Method
List<KontratMasraflari> _tumMasraflar = new List<KontratMasraflari>();
foreach (var kontrat in _kontratlar)
{
var _masraf = db.KontratMasraflaris.Where(x => x.KontratID == kontrat.ID).SingleOrDefault();
if (_masraf == null)
_tumMasraflar.Add(new KontratMasraflari()
{
KontratID = kontrat.ID
});
else
_tumMasraflar.Add(_masraf);
}
var _result = PredicateBuilder.True<KontratMasraflari>();
_result = _result.And(x => x.Silindi == 0);
if (txtFirmaTuru.Text != string.Empty)
_result = _result.And(x => x.FirmaTuru == txtFirmaTuru.Text);
if (txtBelgeNo.Text != string.Empty)
_result = _result.And(x => x.BelgeNumarasi == txtBelgeNo.Text);
if (txtMasraf.Text != string.Empty)
_result = _result.And(x => x.Masraf == txtMasraf.Text);
if (txtGelirGider.Text != string.Empty)
_result = _result.And(x => x.GelirGider == txtGelirGider.Text);
//var _return = db.KontratMasraflaris.Where(_result);
return _tumMasraflar.AsQueryable().Where(_result);;
}
【问题讨论】:
-
你能得到有关堆栈的信息吗?这个方法是在某种递归链中调用的吗?
-
我正在调用查找方法` var result2 = from k in SKontrat().DefaultIfEmpty() from m in SKontratMasraflari().DefaultIfEmpty().GroupBy(x => x.KontratID) where m .FirstOrDefault().KontratID == k.ID`
-
在最后一行,你真的需要在_tumMasraflar上添加AsQueryable()吗? (它已经是一个列表..)
-
我必须这样做。它不接受返回类型
-
您可能正在递归调用该方法以获取 stackoverflow。我只想在第一行代码上设置一个断点,看看你是否不止一次到达断点。然后使用调用堆栈查找递归发生的位置。如果这不起作用,请检查是否有任何类具有应为静态的属性。
标签: c# linq iqueryable