C# LINQ查询筛选器未返回正确数量的结果

C# LINQ查询筛选器未返回正确数量的结果,c#,linq,C#,Linq,我有一个带有许多筛选字段的搜索表单。首先,我将所有字段设置为一个变量,如: 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 kurb

我有一个带有许多筛选字段的搜索表单。首先,我将所有字段设置为一个变量,如:

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个过滤器也适用。我做错了什么,或者有这种情况的任何人都可以描述这一点。

您也可以使用LINQ在列表中搜索。 一种可能性是:

YourListObject.Where(c=>c.Test.Equals("Hallo"))

也可以通过与此等效的方式进行排序或分组。

通常,过滤此类数据的方法是使用累积查询组合;例如:

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();
IQueryable查询=
来自db.kimlik_bilgileri中的kb
在kb.id上的db.dil_bilgisi中加入dbilgi等于dbilgi.KimlikId
在kb.id上的db.okul_bilgileri中加入okbil等于okbil.KimlikId
在kb.id上的db.kurum_bilgileri中加入kurbil等于kurbil.KimlikId
在kurbil上的db.enstitu中加入ens。kurum_id等于ens.id
在库尔比勒的db.kadro_unvan中加入kadr。kadro_id等于kadr.id
其中kb.Aktifmi==true
选择新PSearchModel
{
DilBilgisi=dbilgi,
//Diller=dil,
OkulBilgileri=Okulbil,
卡杜伦万=kadr,
Enstitu=ens,
KimlikBilgileri=kb,
KurumBilgileri=kurbil
};
如果(!yabanciDil.IsNullOrWhiteSpace())
{
int dil_di=转换为32(yabanciDil);
query=query.Where(o=>o.DilBilgisi.dil\u id==dil\u di);
}
// ... 在此处添加其他筛选器
var list=query.ToList();

这会将所有执行延迟到最后,并允许您在调试时检查
dil_di
,以查看它是否符合您的预期。如果您仍然没有得到预期的结果,那么您必须调查发布了什么样的SQL,看看为什么您的结果与预期不同。

您可以选择、排序和分组一个具有LINQ的列表,如下所示:yourVarVariable。其中(m=>m.dil_id=123)注意:If
db。
这里是一个数据上下文(EF,LINQ to SQL,等等)-然后第一个
.ToList()
将执行查询,第二个筛选只在本地内存中进行,而不是在数据库中进行-如果第二个查询旨在减少传输的数据量,这可能很重要。做得好,非常感谢所有共享者。由Marc Gravell的技术人员完成。