我尝试在LINQ查询中使用where
子句。当我使用数值时,它很好,但是当我想比较string
值时,它会在where
子句中给出错误。
string StartBarcode = (from s in datamodel.Packages
where s.RealBarcode == SelectedBarcode
select s.StartBarcode).FirstOrDefault().ToString();
IQueryable<PageData> q = (from v in datamodel.VW_WaypointDetails
where (v.RealBarcode == null) ? StartBarcode : v.RealBarcode
select new PageData
{
Name = v.Name,
Surname = v.Surname,
Description = v.Description
}
错误是&#39;无法将lambda表达式转换为&#39; string&#39;因为它不是委托类型&#39; (我添加了System.Linq
)和无法隐式转换类型&#39;字符串&#39;到&#39; bool&#39; 。
如何将switch-case
语句与string
值一起使用?
谢谢你的所有答案。
答案 0 :(得分:4)
当然它会给你一个错误,因为LINQ where子句需要逻辑,结果应该是true或false。
你的逻辑是(v.RealBarcode == null)? StartBarcode:v.RealBarcode ,只返回字符串。
如果我们将你的linq翻译成英语,它听起来像是:
选择条形码
的某些值听起来应该是这样的:
选择条形码等于
的某些值我认为你的逻辑看起来应该是这样的
where v.RealBarcode == (v.RealBarcode == null) ? StartBarcode : v.RealBarcode
答案 1 :(得分:4)
where (v.RealBarcode == null) ? StartBarcode : v.RealBarcode
会失败,因为这应该是一个谓词,但你可以这样做:
IQueryAble<PageData> q = datamodel.VW_WaypointDetails.AsEnumerable()
.Select(wpd=> new PageData
{
Name = wpd.Name,
SurName = wpd.Surname,
Description = wpd.Description,
Barcode = wpd.Barcode == null ? StartBarCode : wpd.Barcode
}).AsQueryAble();
抱歉忘记了对.AsQueryAble()的调用。不确定这是否合情合理,但你可以尝试省去对.AsEnumerable()的调用(实际上是从数据库中获取数据)......我知道Linq to Entities不支持某些功能正常的Linq Scope所以这可能是不可能的,你必须稍后创建实际的对象。