C# 运算符“&&”不能应用于bool“System.Linq”和搜索、排序和分页类型的操作数
我知道以前已经有人问过这个问题,但我认为我的情况更独特一些,这就是为什么我在这里寻求帮助 所以基本上我有这个表,ServerDB_u,它包含值ServerID pk,fk,DatabaseID pk,fk InstanceName和Verified。为了便于用户阅读,我想从服务器表和数据库表中显示ServerName和DatabaseName,并允许用户使用这些参数进行排序和搜索 本教程是我的天赐之物,但我发现它是有限的 这是我的代码,它是不正确的,并且会出现编译器错误。我已经玩了很多次了,但是我有点被卡住了。我只是不知道如何使用不同的表值,仍然可以使排序、搜索和最后的分页选项工作。我的分页给了我一个异常,因为我添加了其他var值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,并允许用户使用这些参数进行排序和搜索 本教程是我的天赐之物,但我发现它是有限的 这是我的代码,它是不正确的,并且会出现编译器错误。我已经玩了很多次了,但是
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())));