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