运行此代码时,它会像这样获得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);;
}
答案 0 :(得分:1)
我会使用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;
}