簡體   English   中英

使用表格的正確算法是什么 <TEntity> 和LINQ來過濾搜索?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM