Readdy Write
linq ; WHERE ;

LINQ: Mehrfache OR Unterabfragen in einer WHERE Condition erzeugen

07.10.2021 (👁7281)


Mit folgender LINQ Anweisung werden Daten in einer Linq Abfrage mit Sub-Sets gefiltert.

Dabei wird der Filter auf Unterabfragen mit  .ANY(value in Subdata)  ausgeführt.

Technisch entspricht diese Lösung auch einer ForEach Abfrage, bei welcher ein OR-Filter in der WHERE (Filter=A OR Filter=B) aufgebaut wird.

//*add OR into WHERE Statement AS ANY

data = data.Where(q => subData.Any(subData.ID=> q.ID==subData.IDProduct));

 

SQL Syntax, LINQ, Unterabfrage OR Bedingung

string sSQL_Result = "";

 

//< get items >

String[] arrParameter_SetIDs = param_SetItems.setids.Split(";");

String[] arrParameter_SetMonths = param_SetItems.setmonths.Split(";");

int intSetDay = Convert.ToInt32( param_SetItems.setday) ;

//</ get items >

 

//< convert >

List<int> setProductIDs = new List<int>();

foreach (string sID in arrParameter_SetIDs)

{

    setProductIDs.Add(Convert.ToInt32(sID));

}

List<DateTime> setMonths = new List<DateTime>();

foreach (string sMonth in arrParameter_SetMonths)

{

    setMonths.Add(Convert.ToDateTime(sMonth));

}

//</ convert >

 

//--< connect_db >--

var query_ProductDates = (from tblProductDates in _dbContext.tbl_ProductDates

select tblProductDates);

//--</ connect_db >--

 

//-< SubQuery.SelectIDs >-

//*add OR into WHERE Statement

query_ProductDates = query_ProductDates.Where(

    q => setProductIDs.Any(IDProduct=> IDProduct==q.IDProduct)

    );

 

//-</ SubQuery.SelectIDs >-

 

 

sSQL_Result = query_ProductDates.ToQueryString(); //SQL string

sSQL_Result = sSQL_Result + "\n";

foreach(var r in query_ProductDates)

{

    sSQL_Result = sSQL_Result + "\n" + r.IDProduct;

}

 

 

return Ok(sSQL_Result);


0,00 €