1

When running this code it's getting stackoverflow exception like this

An unhandled exception of type 'System.StackOverflowException' 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);;
    }
6
  • Can you get information about the stack? Is this method being invoked in some kind of recursive chain? Commented Aug 11, 2017 at 13:21
  • i am calling in find method ` var result2 = from k in SKontrat().DefaultIfEmpty() from m in SKontratMasraflari().DefaultIfEmpty().GroupBy(x => x.KontratID) where m.FirstOrDefault().KontratID == k.ID` Commented Aug 11, 2017 at 13:25
  • on the last line, do you really need to add AsQueryable() on _tumMasraflar? (it's already a List..) Commented Aug 11, 2017 at 13:32
  • i have to. it's does not accept return type Commented Aug 11, 2017 at 13:35
  • 1
    You probably are recursively calling the method to get a stackoverflow. I would but a break point on 1st line of code and see if you reach the break point more than once. Then use the Call Stack to find where the recursion is occurring. If this doesn't work then check if any classes have properties that should be static. Commented Aug 11, 2017 at 13:53

1 Answer 1

1

I would use LINQ to create the List and then just use regular 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;
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.