使用Table< tenty >的正确算法是什么?和LINQ来过滤搜索

本文关键字:是什么 LINQ 搜索 过滤 算法 Table tenty 使用 | 更新日期: 2023-09-27 17:49:33

我将解释我的设置。我有一个像

这样的表
    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");
    }

问题是,如果我将来要添加新的过滤器,它看起来非常丑陋,可能效率低下,绝对无法扩展。我想知道做这件事的正确方法是什么。

使用Table< tenty >的正确算法是什么?和LINQ来过滤搜索

我会先解决我的评论,但对于查询,尝试如下:

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