C# 运算符“&&”不能应用于bool“System.Linq”和搜索、排序和分页类型的操作数

C# 运算符“&&”不能应用于bool“System.Linq”和搜索、排序和分页类型的操作数,c#,asp.net,asp.net-mvc,linq,C#,Asp.net,Asp.net Mvc,Linq,我知道以前已经有人问过这个问题,但我认为我的情况更独特一些,这就是为什么我在这里寻求帮助 所以基本上我有这个表,ServerDB_u,它包含值ServerID pk,fk,DatabaseID pk,fk InstanceName和Verified。为了便于用户阅读,我想从服务器表和数据库表中显示ServerName和DatabaseName,并允许用户使用这些参数进行排序和搜索 本教程是我的天赐之物,但我发现它是有限的 这是我的代码,它是不正确的,并且会出现编译器错误。我已经玩了很多次了,但是

我知道以前已经有人问过这个问题,但我认为我的情况更独特一些,这就是为什么我在这里寻求帮助

所以基本上我有这个表,ServerDB_u,它包含值ServerID pk,fk,DatabaseID pk,fk InstanceName和Verified。为了便于用户阅读,我想从服务器表和数据库表中显示ServerName和DatabaseName,并允许用户使用这些参数进行排序和搜索

本教程是我的天赐之物,但我发现它是有限的

这是我的代码,它是不正确的,并且会出现编译器错误。我已经玩了很多次了,但是我有点被卡住了。我只是不知道如何使用不同的表值,仍然可以使排序、搜索和最后的分页选项工作。我的分页给了我一个异常,因为我添加了其他var值

public ActionResult Index(string sortOrder, string searchString, int? page)
    {
        ViewBag.CurrentSort = sortOrder;
        ViewBag.IDSortParm = String.IsNullOrEmpty(sortOrder) ? "ServerID_desc" : "";
        ViewBag.ID2SortParm = sortOrder == "ID2" ? "DatabaseID_desc" : "ID";
        ViewBag.NameSortParm = sortOrder == "Name" ? "ServerName_desc" : "Name";
        ViewBag.Name2SortParm = sortOrder == "Name2" ? "DatabaseName_desc" : "Name2";

        if (Request.HttpMethod != "GET")
        {
            page = 1;
        }

        ViewBag.CurrentFilter = searchString;
        var serverdb= from s in db.ServerDB_ //original var serverdb
                       select s;
        var server = from x in db.Server_ //created this for the Server_ values
                       select x;
        var database = from y in db.Database_ //created this for the Database_ values
                       select y;
        if (!String.IsNullOrEmpty(searchString)) //newserverdb is what I made to hold the values from all the different tables
        {
          var  newserverdb = (serverdb.Where(s => s.ServerID.ToString().Contains(searchString.ToUpper())
                &&(server.Where(x => x.ServerName.ToUpper().Contains(searchString.ToUpper())));

        }


        switch (sortOrder)
        {
            case "ServerID_desc":
                serverdb = serverdb.OrderByDescending(s => s.ServerID);
                break;
            case "ID2":
                serverdb = serverdb.OrderBy(s=> s.DatabaseID);
                break;
            case "DatabaseID_desc":
                serverdb = serverdb.OrderByDescending(s => s.DatabaseID);
                break;
            case "Name":
                server = server.OrderBy(x => x.ServerName);
                break;
            case "ServerName_desc":
                server = server.OrderByDescending(x => x.ServerName);
                break;
            case "Name2":
                database = database.OrderBy(y => y.DatabaseName);
                break;
            case "DatabaseName_desc":
                database = database.OrderByDescending(y => y.DatabaseName);
                break;
            default:
                serverdb = serverdb.OrderBy(s =>s.ServerID);
                break;
        }


        int pageSize = 20;
        int pageNumber = (page ?? 1);
        return View(newserverdb.ToPagedList(pageNumber, pageSize));
    }
如果我的问题有点难以理解,我很抱歉。我试着尽可能雄辩地表达出来,但这些东西很难理解


谢谢大家

条件的第二部分将返回IEnumerable

而运算符&&需要在右边有一个布尔值

使用可枚举。类似于:

我不确定以后在代码中如何使用查询,因为您已经在if块中定义了它,并且它只在那里可见。因此,稍后当您这样做时:

return View(newserverdb.ToPagedList(pageNumber, pageSize));
您将得到一个错误,因为newserverdb在此不可见


您可以在if块之外声明一个IQueryable newserverdb,然后使用它,也可以在方法末尾移动整个块,然后从if块内部返回

您需要将Where更改为任意:

var  newserverdb = (serverdb.Where(s => s.ServerID.ToString().Contains(searchString.ToUpper())
                && (server.Any(x => x.ServerName.ToUpper().Contains(searchString.ToUpper())));

你到底想达到什么目的?您当前正在一个只包含该变量声明的块中声明一个新的局部变量。。。理想情况下,您应该将问题简化为一个简短但完整的程序来演示问题……我现在意识到了局部变量的问题。
return View(newserverdb.ToPagedList(pageNumber, pageSize));
var  newserverdb = (serverdb.Where(s => s.ServerID.ToString().Contains(searchString.ToUpper())
                && (server.Any(x => x.ServerName.ToUpper().Contains(searchString.ToUpper())));