LINQ Onde com E OU condição
-
19-09-2019 - |
Pergunta
Então, eu consegui obter essa consulta trabalhando
List<string> listStatus = new List<string>() ;
listStatus.add("Text1");
List<string> listMerchants = new List<string>() ;
listMerchants.add("Text2");
from item in db.vw_Dropship_OrderItems
where listStatus.Contains(item.StatusCode)
&& listMerchants.Contains(item.MerchantId)
select item;
Aqui eu gostaria de verificar se listStatus e listMerchants não são nulos só então colocá-los dentro cláusula WHERE.
Como
Se listMerchants é nulo, em seguida, consulta será como
where listStatus.Contains(item.StatusCode)
Eu não quero usar o interruptor ou se a condição.
Graças
Solução
from item in db.vw_Dropship_OrderItems
where (listStatus != null ? listStatus.Contains(item.StatusCode) : true) &&
(listMerchants != null ? listMerchants.Contains(item.MerchantId) : true)
select item;
Pode dar estranho comportamento se ambos os listMerchants e listStatus são ambos null.
Outras dicas
Bem, você vai ter que verificar se há algum lugar nulo. Você poderia fazer algo parecido com isto:
from item in db.vw_Dropship_OrderItems
where (listStatus == null || listStatus.Contains(item.StatusCode))
&& (listMerchants == null || listMerchants.Contains(item.MerchantId))
select item;
Linq Com ou condição usando expressão Lambda que você pode fazer como abaixo
DataTable dtEmp = new DataTable();
dtEmp.Columns.Add("EmpID", typeof(int));
dtEmp.Columns.Add("EmpName", typeof(string));
dtEmp.Columns.Add("Sal", typeof(decimal));
dtEmp.Columns.Add("JoinDate", typeof(DateTime));
dtEmp.Columns.Add("DeptNo", typeof(int));
dtEmp.Rows.Add(1, "Rihan", 10000, new DateTime(2001, 2, 1), 10);
dtEmp.Rows.Add(2, "Shafi", 20000, new DateTime(2000, 3, 1), 10);
dtEmp.Rows.Add(3, "Ajaml", 25000, new DateTime(2010, 6, 1), 10);
dtEmp.Rows.Add(4, "Rasool", 45000, new DateTime(2003, 8, 1), 20);
dtEmp.Rows.Add(5, "Masthan", 22000, new DateTime(2001, 3, 1), 20);
var res2 = dtEmp.AsEnumerable().Where(emp => emp.Field<int>("EmpID")
== 1 || emp.Field<int>("EmpID") == 2);
foreach (DataRow row in res2)
{
Label2.Text += "Emplyee ID: " + row[0] + " & Emplyee Name: " + row[1] + ", ";
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow