不能将字符串转换为bool

本文关键字:bool 转换 字符串 不能 | 更新日期: 2023-09-27 17:50:21

我得到一个错误:不能隐式地从'字符串'转换为'bool'sl.CustomerRefNbr是一个字符串从我的表设计

    using (AH_ODS_DBEntities db = new AH_ODS_DBEntities())
    {
        string rs = db.Sales.Where(sl => sl.CustomerRefNbr);

I have try:

bool rs = db.Sales.Where(sl => sl.CustomerRefNbr).ToString();
string rs = db.Sales.Where(sl => sl.CustomerRefNbr);
Convert.ToBoolean(rs);

我又瞎了。我要做的就是从CustomerRefNbr列中获取数据并将其放在列表中

不能将字符串转换为bool

where子句需要一个布尔子句,并且您通过CustomerRefNbr给它可能是字符串或数值。如果你想选择所有这些值到一个列表中,使用select Linq方法:vars = db.Sales.Select(sl => sl.CustomerRefNbr).ToList();

最好将'Sale'保存为bool属性,或者至少保存为int。但无论如何,对于您的任务,下一个解决方案有助于避免解析错误。

var res = db.Sales.Where(x =>x.CustomerRefNbr!= null && x.CustomerRefNbr.ToUpper()=="TRUE");
你的代码
string rs = db.Sales.Where(sl => sl.CustomerRefNbr);

实际上没有意义。您正在选择Sales,其中客户参考编号是..怎么啦?然后把销售列表赋值给一个字符串?

它看起来有点像你想说你想要输出CustomerRefNbr,但是你没有说你想要哪一行的值。

你得到一个错误关于试图转换字符串为bool的原因是因为Where期望一个表达式返回布尔值。布尔值为true的行将包含在结果中。它试图将sl.CustomerRefNbr解释为布尔值并且失败。

即使它工作,结果将是一个Sale对象的集合,而不是一个字符串,所以你会得到另一个错误。

您需要指定Where的哪一行和Select的哪一列。

例如:

 string rs = db.Sales.Where(sl => sl.Id == 123).Select(sl => sl.CustomerRefdNbr).First();

注意,Where部分是一个返回布尔值的表达式。

因为结果仍然是一个集合(即使您知道只有一个结果),您必须调用First才能将第一个结果转换为单个string

如果您想要所有 CustomerRefNbr值,那么您可以省略Where:

List<string> refs = db.Sales.Select(sl => sl.CustomerRefNbr).ToList();

db.Sales.Where(sl => sl.CustomerRefNbr)导致编译时错误,因为where期望predicate(返回true或false的东西)而您没有提供一个。

你可能想要的是Select而不是Wheredb.Sales.Select(sl => sl.CustomerRefNbr);再次返回CustomerRefNbr (IEnumerable<string>)的集合,而不是单个值(string)

将"collection"赋值给string ("single")类型的变量没有意义,并且再次导致compile错误。

如果你想从IEnumerable集合中获得一个值,你可以使用db.Sales.Select(sl => sl.CustomerRefNbr).First()。这将在所有"Sales"中为您提供First"Sale"的"CustomerRefNbr"。

现在,如果你想用CustomerRefNbr过滤"Sales",你可以先用where子句和select CustomerRefNbr来过滤

db.Sales.Where(s1=>s1.CustomerRefNbr=="123").Select(s2 => s2.CustomerRefNbr).First();

现在这给你一个First "CustomerRefNbr"在所有的销售CustomerRefNbr为"123"

我仍然不明白为什么你想要convert"CustomerRefNbr"到boolean ?