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

Getting Stackoverflow exception when executing LINQ IQueryable method

当运行这段代码时,它得到这样的 Whosebug 异常

An unhandled exception of type 'System.WhosebugException' occurred in 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);;
    }

我会使用 LINQ 创建 List 然后只使用常规 IQueryable Where:

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;
}