Si no en LINQ

¿Es posible usar If Else conditional en una consulta LINQ?

Algo como

from p in db.products if p.price>0 select new { Owner=from q in db.Users select q.Name } else select new { Owner = from r in db.ExternalUsers select r.Name } 

Esto podría funcionar …

 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) } 

Supongo desde db que esto es LINQ-to-SQL / Entity Framework / similar (no LINQ-to-Objects);

En general, lo haces mejor con la syntax condicional (a? B: c); sin embargo, no sé si funcionará con tus diferentes consultas de ese tipo (después de todo, ¿cómo escribirías el TSQL?).

Para un ejemplo trivial del tipo de cosas que puede hacer:

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

Puedes hacer cosas mucho más ricas, pero realmente dudo que puedas elegir la mesa en el condicional. Puedes intentarlo, por supuesto …

La respuesta anterior no es adecuada para complicar la expresión de Linq. Todo lo que necesitas es:

 // 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); } 

deberías cambiar así:

 private string getValue(float price) { if(price >0) return "debit"; return "credit"; } //Get value like this select new {p.PriceID, Type = getValue(p.Price)}; 

mi ejemplo:

  companyNamesFirst = this.model.CustomerDisplayList.Where(a => a.CompanyFirst != null ? a.CompanyFirst.StartsWith(typedChars.ToLower())) : false).Select(b => b.CompanyFirst).Distinct().ToList();