我有一个包含许多过滤字段的搜索表单。首先,我将所有字段都添加到var:
var obj = (from kb in db.kimlik_bilgileri
join dbilgi in db.dil_bilgisi on kb.id equals dbilgi.KimlikId
join okbil in db.okul_bilgileri on kb.id equals okbil.KimlikId
join kurbil in db.kurum_bilgileri on kb.id equals kurbil.KimlikId
join ens in db.enstitu on kurbil.kurum_id equals ens.id
join kadr in db.kadro_unvan on kurbil.kadro_id equals kadr.id
where kb.Aktifmi == true select new PSearchModel
{
DilBilgisi = dbilgi,
// Diller = dil,
OkulBilgileri = okbil,
KadroUnvan = kadr,
Enstitu = ens,
KimlikBilgileri = kb,
KurumBilgileri = kurbil
}).ToList();
在此之后,我尝试按以下字段开始过滤:
if (!yabanciDil.IsNullOrWhiteSpace())
{
obj = (from o in obj
where o.DilBilgisi.dil_id == Convert.ToInt32(yabanciDil)
select new PSearchModel
{
DilBilgisi = o.DilBilgisi,
KadroUnvan = o.KadroUnvan,
KimlikBilgileri = o.KimlikBilgileri,
OkulBilgileri = o.OkulBilgileri,
// Diller = o.Diller,
Enstitu = o.Enstitu,
KurumBilgileri = o.KurumBilgileri
}).ToList();
}
首先obj
计数我预期的2k数据,但第二个过滤器返回计数0.我还有4或5个过滤器也适用。我做错了什么或有这种情况的任何人可以形容这一点。
答案 0 :(得分:1)
您也可以使用LINQ在列表中搜索。 一种可能性是:
YourListObject.Where(c=>c.Test.Equals("Hallo"))
也可以订购或分组相当于此。
答案 1 :(得分:1)
通常,这样过滤数据的方法是累积查询组合;例如:
IQueryable<PSearchModel> query =
from kb in db.kimlik_bilgileri
join dbilgi in db.dil_bilgisi on kb.id equals dbilgi.KimlikId
join okbil in db.okul_bilgileri on kb.id equals okbil.KimlikId
join kurbil in db.kurum_bilgileri on kb.id equals kurbil.KimlikId
join ens in db.enstitu on kurbil.kurum_id equals ens.id
join kadr in db.kadro_unvan on kurbil.kadro_id equals kadr.id
where kb.Aktifmi == true
select new PSearchModel
{
DilBilgisi = dbilgi,
// Diller = dil,
OkulBilgileri = okbil,
KadroUnvan = kadr,
Enstitu = ens,
KimlikBilgileri = kb,
KurumBilgileri = kurbil
};
if (!yabanciDil.IsNullOrWhiteSpace())
{
int dil_di = Convert.ToInt32(yabanciDil);
query = query.Where(o => o.DilBilgisi.dil_id == dil_di);
}
// ... add other filters here
var list = query.ToList();
这会将所有执行推迟到最后,并允许您在调试时检查dil_di
,以查看它是否符合您的预期。如果仍然没有得到您期望的结果,那么您将不得不调查正在发布的SQL,以了解您的结果与预期不同的原因。