If Else in LINQ

后端 未结 6 1548
谎友^
谎友^ 2020-12-01 04:38

Is it possible to use If Else conditional in a LINQ query?

Something like

from p in db.products
if p.price>0
select new
{
  Owner=from q in db.Use         


        
相关标签:
6条回答
  • 2020-12-01 04:46

    Answer above is not suitable for complicate Linq expression. All you need is:

    // set up the "main query"
    var test = from p in _db.test select _db.test;
    // if str1 is not null, add a where-condition
    if(str1 != null)
    {
        test = test.Where(p => p.test == str);
    }
    
    0 讨论(0)
  • 2020-12-01 04:52

    my example:

     companyNamesFirst = this.model.CustomerDisplayList.Where(a => a.CompanyFirst != null ? a.CompanyFirst.StartsWith(typedChars.ToLower())) : false).Select(b => b.CompanyFirst).Distinct().ToList();
    
    0 讨论(0)
  • 2020-12-01 04:55
     var result = _context.Employees
                    .Where(x => !x.IsDeleted)
                    .Where(x => x.ClientId > (clientId > 0 ? clientId - 1 : -1))
                    .Where(x => x.ClientId < (clientId > 0 ? clientId + 1 : 1000))
                    .Where(x => x.ContractorFlag == employeeFlag);
                return result;
    

    If clientId = 0 we want ALL employees,. but for any clientId between 1 and 999 we want only clients with that ID. I was having issues with seperate LINQ statements not being the same (Deleted/Clients filters need to be on all queries), so by add these two lines it works (all be it until we have 999+ clients - which would be a happy re-factor day!!

    0 讨论(0)
  • 2020-12-01 05:02

    This might work...

    from p in db.products
        select new
        {
            Owner = (p.price > 0 ?
                from q in db.Users select q.Name :
                from r in db.ExternalUsers select r.Name)
        }
    
    0 讨论(0)
  • 2020-12-01 05:08

    I assume from db that this is LINQ-to-SQL / Entity Framework / similar (not LINQ-to-Objects);

    Generally, you do better with the conditional syntax ( a ? b : c) - however, I don't know if it will work with your different queries like that (after all, how would your write the TSQL?).

    For a trivial example of the type of thing you can do:

    select new {p.PriceID, Type = p.Price > 0 ? "debit" : "credit" };
    

    You can do much richer things, but I really doubt you can pick the table in the conditional. You're welcome to try, of course...

    0 讨论(0)
  • 2020-12-01 05:09

    you should change like this:

    private string getValue(float price)
    {
        if(price >0)
            return "debit";
        return "credit";
    }
    
    //Get value like this
    select new {p.PriceID, Type = getValue(p.Price)};
    
    0 讨论(0)
提交回复
热议问题