我正在使用来自表单的字符串来查找数据库中具有相同变量名称的对象。假设我想在一个充满公交车站的数据库中找到一个名称为“ Central”的公交车站。如果找到一个,我想将“中央”站的地址变量放入会话中(以供进一步使用)。数据库运行良好,我可以从中检索其他内容,但是问题是比较两个字符串。
Session["searchFor"]="Central";
Session["adress"]=null;
var db = new Models.DB();
List<Models.Station> allStations = db.Station.ToList();
foreach (Station station in allStations)
{
if(String.Compare(Session["searchFor"].toString(), station.name) == 0)
{
Session["adress"]=station.adress;
break;
}
}
我已经尝试过与网上找到的方法进行各种可能的比较,但似乎没有任何效果。
您可以使用此代码进行很多改进。首先,Session["searchFor"].ToString()
实际上是Object.toString(),它没有执行您认为正在做的事情,没有将“ searchFor”键的值转换为字符串。
下面是经过改进的版本,它只是任何编码语言中的常见最佳实践,也是C#中的几个常见模式。它包括正确的拼写变量以及C#类中的大写字母属性,并处理字符串比较的潜在大小写敏感性。
Session["searchFor"] = "Central"; //setting Session values for testing
//Session["address"] = null; there is no need for this.
var db = new Models.DB();
List<Models.Station> allStations = db.Station.ToList();
var searchForValue = (string) Session["searchFor"];
foreach (Station station in allStations)
{
if (searchForValue.ToLower() == station.Name.ToLower())
{
Session["address"] = station.Address;
break;
}
}
这是在使用LINQ的C#中非常常见的版本:
//setting Session values for testing
Session["searchFor"] = "Central";
var db = new Models.DB();
List<Models.Station> allStations = db.Station.ToList();
var searchForValue = (string) Session["searchFor"];
var station = allStations.FirstOrDefault(x => x.Name.ToLower() == searchForValue.ToLower());
if (station != null)
{
Session["address"] = station.Address;
}
没有看到您的数据,这是一个猜谜游戏。但是很可能您遇到区分大小写的问题,或者您的数据库列固定宽度。
//if(String.Compare(Session["searchFor"].toString(), station.name) == 0)
if(String.Compare(Session["searchFor"].ToString(), station.name.Trim(), true) == 0)