C# 执行LINQ IQueryable方法时获取Stackoverflow异常

C# 执行LINQ IQueryable方法时获取Stackoverflow异常,c#,linq,iqueryable,C#,Linq,Iqueryable,当运行此代码时,会出现如下stackoverflow异常 “System.StackOverflowException”类型的未处理异常 发生在mscorlib.dll中 private IQueryable SKontratMasraflari() { var _kontallar=SKontrat().ToList();//IQueryable方法 列表_tummasrafral=新列表(); foreach(var kontrat in_Kontrallar) { var\u masraf

当运行此代码时,会出现如下stackoverflow异常

“System.StackOverflowException”类型的未处理异常 发生在mscorlib.dll中

private IQueryable SKontratMasraflari()
{
var _kontallar=SKontrat().ToList();//IQueryable方法
列表_tummasrafral=新列表();
foreach(var kontrat in_Kontrallar)
{
var\u masraf=db.kontramasraflaris.Where(x=>x.kontrad==kontrat.ID).SingleOrDefault();
如果(_masraf==null)
_添加(新的KontratMasraflari()
{
kontrad=kontrat.ID
});
其他的
_添加(_masraf);
} 
var_result=PredicateBuilder.True();
_结果=_result.And(x=>x.Silindi==0);
if(txtfirmatitu.Text!=string.Empty)
_结果=_result.And(x=>x.firmatturu==txtfirmatturu.Text);
if(txtBelgeNo.Text!=string.Empty)
_结果=_result.And(x=>x.BelgeNumarasi==txtBelgeNo.Text);
if(txtMasraf.Text!=string.Empty)
_result=_result.And(x=>x.Masraf==txtMasraf.Text);
if(txtgerirgider.Text!=string.Empty)
_结果=_result.And(x=>x.GelirGider==txtGelirGider.Text);
//var _return=db.KontratMasraflaris.Where(_result);
返回_tummasrafar.AsQueryable().Where(_result);;
}

我将使用LINQ创建
列表
,然后只使用常规的
IQueryable
其中

private IQueryable<KontratMasraflari> SKontratMasraflari() {
    var _kontratlar = SKontrat().ToList();//IQueryable Method
    var _tumMasraflar = SKontrat.GroupJoin(db.KontratMasraflaris, sk => sk.ID, km => km.KontratID, (sk, kmg) => kmg.Any() ? kmg.Single() : new KontratMasraflari { KontratID = sk.ID }).ToList();

    var _result = _tumMasraflar.Where(x => x.Silindi == 0);

    if (txtFirmaTuru.Text != string.Empty)
        _result = _result.Where(x => x.FirmaTuru == txtFirmaTuru.Text);
    if (txtBelgeNo.Text != string.Empty)
        _result = _result.Where(x => x.BelgeNumarasi == txtBelgeNo.Text);
    if (txtMasraf.Text != string.Empty)
        _result = _result.Where(x => x.Masraf == txtMasraf.Text);
    if (txtGelirGider.Text != string.Empty)
        _result = _result.Where(x => x.GelirGider == txtGelirGider.Text);

    //var _return = db.KontratMasraflaris.Where(_result); 
    return _result;
}
private IQueryable SKontratMasraflari(){
var _kontallar=SKontrat().ToList();//IQueryable方法
var_tummasrafral=SKontrat.GroupJoin(db.kontramasraflaris,sk=>sk.ID,km=>km.kontrad,(sk,kmg)=>kmg.Any()?kmg.Single():new kontramasraflari{kontrad=sk.ID}).ToList();
var _result=_tumMasraflar.Where(x=>x.Silindi==0);
if(txtfirmatitu.Text!=string.Empty)
_result=_result.Where(x=>x.firmatru==txtffirmatru.Text);
if(txtBelgeNo.Text!=string.Empty)
_result=_result.Where(x=>x.BelgeNumarasi==txtBelgeNo.Text);
if(txtMasraf.Text!=string.Empty)
_result=_result.Where(x=>x.Masraf==txtMasraf.Text);
if(txtgerirgider.Text!=string.Empty)
_result=_result.Where(x=>x.GelirGider==txtGelirGider.Text);
//var _return=db.KontratMasraflaris.Where(_result);
返回结果;
}

您可以获取有关堆栈的信息吗?这个方法是在某种递归链中调用的吗?我正在从SKontrat()中的k调用find方法`var result2=。从SKontratMasraflari()中的m调用DefaultIfEmpty()。DefaultIfEmpty().GroupBy(x=>x.kontrad),其中m.FirstOrDefault().kontrad==k.ID`在最后一行,您真的需要在_tummasrafar上添加AsQueryable()吗?(这已经是一张单子了。)我不得不这么做。它是不接受返回类型。您可能正在递归调用该方法以获得stackoverflow。我只想在代码的第1行找到一个断点,看看您是否不止一次到达断点。然后使用调用堆栈查找递归发生的位置。如果这不起作用,那么检查是否有任何类的属性应该是静态的。
private IQueryable<KontratMasraflari> SKontratMasraflari() {
    var _kontratlar = SKontrat().ToList();//IQueryable Method
    var _tumMasraflar = SKontrat.GroupJoin(db.KontratMasraflaris, sk => sk.ID, km => km.KontratID, (sk, kmg) => kmg.Any() ? kmg.Single() : new KontratMasraflari { KontratID = sk.ID }).ToList();

    var _result = _tumMasraflar.Where(x => x.Silindi == 0);

    if (txtFirmaTuru.Text != string.Empty)
        _result = _result.Where(x => x.FirmaTuru == txtFirmaTuru.Text);
    if (txtBelgeNo.Text != string.Empty)
        _result = _result.Where(x => x.BelgeNumarasi == txtBelgeNo.Text);
    if (txtMasraf.Text != string.Empty)
        _result = _result.Where(x => x.Masraf == txtMasraf.Text);
    if (txtGelirGider.Text != string.Empty)
        _result = _result.Where(x => x.GelirGider == txtGelirGider.Text);

    //var _return = db.KontratMasraflaris.Where(_result); 
    return _result;
}