LINQ查询过滤器未返回正确数量的结果

时间:2018-02-02 14:06:04

标签: c# linq

我有一个包含许多过滤字段的搜索表单。首先,我将所有字段都添加到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个过滤器也适用。我做错了什么或有这种情况的任何人可以形容这一点。

2 个答案:

答案 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,以了解您的结果与预期不同的原因。