简体   繁体   English

Linq查询(过滤器,在哪里,如果)

[英]Linq query(Filter, where, if)

I want to put the variables that are filled in question in the where condition. 我想将有问题的变量放在where条件中。 How can I do with Linq? Linq我该怎么办?

Running query; 运行查询;

  query = db.Kisi.Where(item => item.KAYITTIPI == registerType)
           .Where(item => item.ADI.Contains(name))
           .Where(item => item.SOYADI.Contains(surname))
           .Where(item => item.UNVAN.Contains(title))
           .OrderBy(item => item.ID)
           .Skip(page)
           .Take(top)
           .ToList();

I want to do; 我想要做;

var query = db.Kisi.Where(item => item.KAYITTIPI == registerType)
                if (String.IsNullOrEmpty(name))
                {
                   .Where(item => item.ADI.Contains(name))
                }
                 else if (String.IsNullOrEmpty(surname))
                {
                    .Where(item => item.SOYADI.Contains(surname))
                }

                 .Where(item => item.UNVAN.Contains(title))
                 .OrderBy(item => item.ID)
                 .Skip(page)
                 .Take(top)
                 .ToList();

Error; 错误;

State Error CS0103 The name 'Where' does not exist in the current context 

You can compose your LINQ query in separate statements and they won't be executed until you call ToList : 您可以在单独的语句中组成LINQ查询,直到调用ToList才会执行它们:

IQueryable<Kisi> query = db.Kisi.Where(item => item.KAYITTIPI == registerType);

if (!String.IsNullOrEmpty(name))
{
   query = query.Where(item => item.ADI.Contains(name))
}
if (!String.IsNullOrEmpty(surname))
{
    query = query.Where(item => item.SOYADI.Contains(surname))
}

var result = query.Where(item => item.UNVAN.Contains(title))
                  .OrderBy(item => item.ID)
                  .Skip(page)
                  .Take(top)
                  .ToList();

Why not put all your expressions in one boolean expression? 为什么不将所有表达式都放在一个布尔表达式中呢?

var result = db.Kisi.Where(item => (item.KAYITTIPI == registerType)
    && (!String.IsNullOrEmpty(name)) || item.ADI.Contains(name))
    && (!String.IsNullOrEmpty(surname) || item.SOYADI.Contains(surname))
    && item.UNVAN.Contains(title))
    .OrderBy(...)
    .Skip(...)
    .Take(...);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM