运算符'!='不能应用于类型的操作数

Fir*_*com -1 c# linq asp.net-mvc

所以我有一个控制器正在实现搜索数据库中的文件.用户可以选择按两个字段"组织"和"类别"过滤搜索,也可以将这些下拉菜单保留为"全部".

我有3个表可以使用:

(1)

       orgs 
---------------------
orgid   |   orgname
Run Code Online (Sandbox Code Playgroud)

(2)

       cats 
---------------------
orgid   |   orgname
Run Code Online (Sandbox Code Playgroud)

(3)

                   files
------------------------------------------
fileid  |   orgid   |   catid   | filename 
Run Code Online (Sandbox Code Playgroud)

并且文件名是他们正在搜索的内容.为了缩小结果范围,我正在使用files数据库的镜像并从中删除行:

    [HttpPost]
    public ActionResult AssetSearch (string selectedOrgName, string selectedCatName, string searchVal)
    {
        PortalData PD = new PortalData();

        if (selectedOrgName != "All")
        {

            var selectedOrgId = PD.orgs.FirstOrDefault(o => o.orgname == selectedOrgName); // Get the orgid corresponding to the selected organization
            if (selectedOrgId == null) return Content("Couldn't find row for organization '" + selectedOrgName + "' in the database."); // Return error message if no such oranization name exists

            (from thisfile in PD.orgs where thisfile.orgid != selectedOrgId select thisfile).Delete(); // Delete all rows that don't have an orgid corresponding to the selected organization

        } // if search is filtered by a specific organization

        if (selectedCatName != "All")
        {

            var selectedCatId = PD.cats.FirstOrDefault(c => c.catname == selectedCatName); // Get the catid corresponding to the selected category 
            if (selectedCatId == null) return Content("Couldn't find row for category '" + selectedCatName + "' in the database."); // Return error message if no such organization name exists

            (from thisfile in PD.orgs where thisfile != selectedCatId select thisfile).Delete();

        } // if search is filtered by a specfic category 
Run Code Online (Sandbox Code Playgroud)

我的第一个问题与我在标题中提到的错误有关.错误指向

thisfile.orgid != selectedOrgId
Run Code Online (Sandbox Code Playgroud)

thisfile.orgid != selectedCatId
Run Code Online (Sandbox Code Playgroud)

我不确定为什么它不喜欢那些表达式,考虑到orgidSQL数据库中的ints 是s,因此应该是返回的值PD.orgs.FirstOrDefault(o => o.orgname == selectedOrgName).

我的下一个问题是如何使凌乱的代码更加紧凑,高效,可读和可靠.

(我是C#/ LINQ /等的n00b,所以对我来说很容易!)

Ale*_*yny 5

var selectedOrgId = PD.orgs.FirstOrDefault(o => o.orgname == selectedOrgName);
Run Code Online (Sandbox Code Playgroud)

将是实体类型"组织",而不是它的id,与之相同

var selectedCatId = PD.cats.FirstOrDefault(c => c.catname == selectedCatName);
Run Code Online (Sandbox Code Playgroud)

所以你需要选择这样的ID:

var selectedOrgId = PD.orgs.FirstOrDefault(o => o.orgname == selectedOrgName).OrgID;
Run Code Online (Sandbox Code Playgroud)

我还建议你检查那里的null,查询的结果

PD.orgs.FirstOrDefault(o => o.orgname == selectedOrgName)
Run Code Online (Sandbox Code Playgroud)

不是空的