Eingabe:
URL Query-String mit dem parametern: q= asp core xam
https://localhost:44341/projects?q=asp%20core%20xam
Ausgabe:
als Ergebnis werden alle Asp.Net Programmierer mit Xamarin Kenntnissen gefunden
Linq Query nach mehreren Worten durchsuchen:
Wenn man eine Linq Abfrage mit mehreren Worten wie bei der Google Suche erstellen möchte,
dann muss man die Eingabe erst einmal teilen in einzelne Worte
string[] arrFilter = parFilter.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); |
Aus dem daraus folgenden Array mit Strings muss man dann einen For-Each durchlauf für jedes einzelne Wort durchlaufen.
Dadurch wird die Ausgabe immer kleiner.
foreach(string sWord in arrFilter ) { query = query.Where(p =>p.project.Title.Contains(sWord) } |
Durchlauf der Query.Where Filter nach mehreren Worten:
//--< filter: Text >-- string parFilter = Request.Query["q"]; if(parFilter != null) { string[] arrFilter = parFilter.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); foreach(string sWord in arrFilter ) { if (sWord != "") {query = query.Where(p =>p.project.Title.Contains(sWord) } } } //--</ filter: Text >-- |
Linq-Query Aufbau
Linq-Query mit mehrstufiger Filterung nach einzelnen Worten
//------< Get Linq.Query >------ //*gets last 10 Projects with View_Sum var query = (from project in _dbContext.tbl_Projects join u in _dbContext.tbl_Users on project.IDOwner equals u.IDUser into user_and_projects
from un in user_and_projects.DefaultIfEmpty() join aspUser in _dbContext.Users on un.IDAspNetUser equals aspUser.Id into user_and_projects_and_aspUser from unAsp in user_and_projects_and_aspUser.DefaultIfEmpty()
orderby project.IDProject descending select new { project, unAsp.UserName }); //--< filter: Text >-- string parFilter = Request.Query["q"]; if(parFilter != null) { string[] arrFilter = parFilter.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); foreach(string sWord in arrFilter ) { if (sWord != "") { query = query.Where(p => p.project.Title.Contains(sWord) || p.project.Text.Contains(sWord) || p.project.Auslastung.Contains(sWord) || p.project.Branche.Contains(sWord) || p.project.Dauer.Contains(sWord) || p.project.Folder.Contains(sWord) || p.project.Gehalt.Contains(sWord)); } } } //--</ filter: Text >--
//--< filter: Ort >-- string sOrt = "de"; if (sOrt != "") { query = query.Where(p => p.project.Ort.Contains(sOrt) || p.project.Land.Contains(sOrt) || p.project.Region.Contains(sOrt) ); } //--</ filter: Ort >-- query.Take(100); //------</ Get Linq.Query >------
|
Komplettes Code Beispiel:
Kompletter C# Controller Code für die Index Methode zum Auflisten der Einträge
// GET: /Project Root public async Task<IActionResult> Index_All() { ///-------------< Index_All >------------- //--< Get User ID >-- //internal referenz-Number for tracking in tables long IDCurrent_User = await UserInfo_Methods.getIDUser_as_Number(this.User, _dbContext); //--</ Get User ID >--
//------< Get Linq.Query >------ //*gets last 10 Projects with View_Sum var query = (from project in _dbContext.tbl_Projects join u in _dbContext.tbl_Users on project.IDOwner equals u.IDUser into user_and_projects
from un in user_and_projects.DefaultIfEmpty() join aspUser in _dbContext.Users on un.IDAspNetUser equals aspUser.Id into user_and_projects_and_aspUser from unAsp in user_and_projects_and_aspUser.DefaultIfEmpty()
orderby project.IDProject descending select new { project, unAsp.UserName }); //--< filter: Text >-- string parFilter = Request.Query["q"]; if(parFilter != null) { string[] arrFilter = parFilter.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); foreach(string sWord in arrFilter ) { if (sWord != "") { query = query.Where(p => p.project.Title.Contains(sWord) || p.project.Text.Contains(sWord) || p.project.Auslastung.Contains(sWord) || p.project.Branche.Contains(sWord) || p.project.Dauer.Contains(sWord) || p.project.Folder.Contains(sWord) || p.project.Gehalt.Contains(sWord)); } } } //--</ filter: Text >--
//--< filter: Ort >-- string sOrt = "de"; if (sOrt != "") { query = query.Where(p => p.project.Ort.Contains(sOrt) || p.project.Land.Contains(sOrt) || p.project.Region.Contains(sOrt) ); } //--</ filter: Ort >-- query.Take(100); //------</ Get Linq.Query >------
////-< match_IDlist >- //string MatchList = ""; //foreach (var row in query) //{ // MatchList = MatchList + "-" + row.project.IDProject; //} //ViewData["MatchList"] = MatchList; ////-</ match_IDlist >-
//----< fill Data_to_View >---- List<Projects_Index_DataModel> dataList = new List<Projects_Index_DataModel>();
//---< @Loop: Rows >--- foreach (var row in query) { //--< Row to Data >-- //< correct > string sShort = row.project.Text; if (sShort.Length > 255) { sShort = sShort.Substring(0, 255); }
row.project.Text = sShort; //</ correct >
//< Data > Projects_Index_DataModel item = new Projects_Index_DataModel(); item.Project = row.project; item.Ownername = row.UserName; //</ Data >
//< add > dataList.Add(item); //</ add > //--</ Row to Data >-- } //---</ @Loop: Rows >--- //----</ fill Data_to_View >----
//< data to view > Projects_Index_View_DataModel dataView = new Projects_Index_View_DataModel(); dataView.IDCurrent_User = IDCurrent_User; dataView.List_Projects_with_Owner = dataList; //</ data to view >
//--< MetaData >-- string sText = ""; string sImage = ""; if (query.Count() > 0) { var qResult = await query.FirstOrDefaultAsync(); sText = qResult.project.Title; } else { sText = "📜 latest news "; } int lenMax200 = sText.Length; if (lenMax200 > 200) lenMax200 = 200; string sMetaDescription = sText.Substring(0, lenMax200); string sFacebook_AppID = Website_Constants.fp_appID;
String sMetaData = "<meta property=\"og:title\" content=\"" + sText + "\" />"; sMetaData += Environment.NewLine + "<meta property=\"og:type\" content=\"website\" />"; sMetaData += Environment.NewLine + "<meta property=\"og:url\" content=\"" + Website_Constants.URL_Domain_Base + "/📜\" />"; sMetaData += Environment.NewLine + "<meta property=\"og:site_name\" content=\"" + Website_Constants.Domain_Shortname + "\" />"; sMetaData += Environment.NewLine + "<meta property=\"og:description\" content=\"" + sMetaDescription + "\">"; sMetaData += Environment.NewLine + "<meta property=\"fb:app_id\" content=\"" + sFacebook_AppID + "\">"; sMetaData += Environment.NewLine + "<meta property=\"og:image\" content=\"" + sImage + "\" />";
sMetaData = System.Net.WebUtility.HtmlDecode(sMetaData); ViewData["MetaData"] = sMetaData; //--</ MetaData >--
//< out to view > string sMobile_Extenstion = Request_Methods.set_optional_Mobile_Extension(Request); return View("index_all" + sMobile_Extenstion, dataView); //</ out to view > ///-------------</ Index_All >------------- } |