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

时间:2015-05-15 00:52:10

标签: c# asp.net-mvc linq

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

我有3个表可供使用:

(1)

tmdbsimple

(2)

       orgs 
---------------------
orgid   |   orgname

(3)

       cats 
---------------------
orgid   |   orgname

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

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 

thisfile.orgid != selectedOrgId

我不确定为什么它不喜欢这些表达式,因为SQL数据库中的thisfile.orgid != selectedCatId orgid s,因此应该是int返回的值。

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

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

3 个答案:

答案 0 :(得分:5)

var selectedOrgId = PD.orgs.FirstOrDefault(o => o.orgname == selectedOrgName);

将是实体类型“组织”,而不是它的id, 与

相同
var selectedCatId = PD.cats.FirstOrDefault(c => c.catname == selectedCatName);

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

var selectedOrgId = PD.orgs.FirstOrDefault(o => o.orgname == selectedOrgName).OrgID;

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

PD.orgs.FirstOrDefault(o => o.orgname == selectedOrgName)

不为空

答案 1 :(得分:2)

相信你的selectedCatId仍然是pd.org的一个实例所以我认为你需要说这个文件.id!= selectedCatId.orgid

答案 2 :(得分:0)

两种可能的变化:

您应该将名称更改为selectedOrg,而不是selectedOrgId。

 thisfile.orgid != selectedOrg.orgid

您可以更改查询样式

var orgid = (from o in PD.orgs
            where o.orgname==selectedOrgName
            select o.orgid).FirstOrDefault();

因为这会直接为您提供ID并使用您当前的代码。