我收到错误:无法隐式转换为'string'到'bool' sl.CustomerRefNbr是我的表格设计中的字符串
t
我试过了:
using (AH_ODS_DBEntities db = new AH_ODS_DBEntities())
{
string rs = db.Sales.Where(sl => sl.CustomerRefNbr);
我再次失明了。 我要做的就是从CustomerRefNbr列中获取数据并将其放在列表中。
答案 0 :(得分:2)
where子句需要一个boolean子句,并且你可以通过CustomerRefNbr给它一个字符串或数值。如果要像所说的那样选择所有这些值到列表,请使用select Linq方法:
vars = db.Sales.Select(sl => sl.CustomerRefNbr).ToList();
答案 1 :(得分:0)
您的代码
string rs = db.Sales.Where(sl => sl.CustomerRefNbr);
实际上没有意义。您正在选择销售,其中客户参考编号是..什么?然后将销售清单分配给字符串?
看起来有点像你试图说你想要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();
答案 2 :(得分:0)
最好用bool属性保存'Sale',或者至少保存为int。 但无论如何,对于您的任务,下一个解决方案有助于避免解析错误。
var res = db.Sales.Where(x =>x.CustomerRefNbr!= null && x.CustomerRefNbr.ToUpper()=="TRUE");
答案 3 :(得分:0)
db.Sales.Where(sl => sl.CustomerRefNbr)
导致编译时错误,因为where
期望predicate
(返回true或false的内容)并且您没有提供。
您可能想要的是Select
而不是Where
。
db.Sales.Select(sl => sl.CustomerRefNbr);
再次返回CustomerRefNbr(IEnumerable<string>
)的集合,而不是单个值(string
)
分配&#34;集合&#34;对于string
类型的变量(&#34;单个&#34;)值没有意义,并在compile
错误中再次产生结果。
如果您想要IEnumerable
集合中的单个值,则可以使用db.Sales.Select(sl => sl.CustomerRefNbr).First()
。这给了你&#34; CustomerRefNbr&#34; First
&#34; Sale&#34;在所有&#34;销售&#34; 。
现在,如果你想过滤&#34;销售&#34;使用CustomerRefNbr,您可以先使用where
子句过滤并使用select
CustomerRefNbr。
db.Sales.Where(s1=>s1.CustomerRefNbr=="123").Select(s2 => s2.CustomerRefNbr).First();
现在,这会为您提供First
&#34; CustomerRefNbr&#34;在CustomerRefNbr为&#34; 123&#34;
我仍然不明白你为什么要convert
&#34; CustomerRefNbr&#34;到boolean
?