[英]What is the proper algorithm for using Table<TEntity> and LINQ to filter a search?
我將解釋我的設置。 我有一張桌子
fileid | orgid | catid | fname
------------------------------------------------------------------------------------------------------------------
1 | 2 | 1 | "mypowerpoint.ppt"
2 | 7 | 12 | "someworddoc.docx"
3 | 4 | 8 | "homepageimg.jpg"
4 | 9 | 4 | "some_text_document.txt"
和兩個相關的表格
catid | orgid | catname
-------------------------------------------------
1 | 1 | "Some Category"
2 | 1 | "Some other Category"
3 | 2 | "Category XYZ"
4 | 3 | "My category"
和
orgid | orgname
----------------------------------
1 | Company A
2 | Company B
3 | Company C
4 | Company D
如果將這些作為背景,則用戶應選擇過濾搜索的文件名( fname
)。 搜索檢查他們放置的搜索是否包含在任何文件名中。 他們可以按組織和/或類別過濾搜索。 這些過濾器均以下拉列表的形式出現,如果不使用過濾器,則選擇“全部”。 他們的搜索結果作為HTML表的行返回。
這是我的方法,可返回這些搜索結果:
public ActionResult Search (string selectedOrgName, string selectedCatName, string searchVal)
{
PortalData PD = new PortalData();
string htmlRows = "";
foreach (AssetFile f in PD.files)
{
if (f.filename.Contains(searchVal))
{
string fOrgName = PD.orgs.FirstOrDefault(o => o.orgid == f.orgid).orgname;
string fCatName = PD.cats.FirstOrDefault(c => c.catid == f.catid).catname;
if ( (selectedOrgName == "ALL" || fOrgName == selectedOrgName)
&& (selectedCatName == "ALL" || fCatName == selectedCatName) )
{
htmlRows += "<tr>" + "<td><input type=\"checkbox\"/></td><td>" + fOrgName + "</td><td>" + fCatName + "</td><td>" + f.filename + "</td></tr>";
}
}
}
if (string.IsNullOrEmpty(htmlRows)) htmlRows = "No results found!";
return Content(htmlRows, "text/html");
}
問題是,如果我將來要添加新的過濾器,它看起來很丑陋,可能效率很低,而且絕對不可擴展。 我想知道這樣做的正確方法是什么。
我將首先解決我的評論,但對於查詢,請嘗試以下操作:
IQueryable<myTable> PortalData;
// here is your first search / filter
PortalData = PortalData.Where(x => x.filename.contains(q));
// here is later future filters
// just an example of another filter on top of first one
PortalData = PortalData.Where(x => x.Id < whatever)
return PortalData.Select(x => new { x.orgName , x.catName });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.