在 Linq where 子句中使用带有字符串的 switch-case
Using switch-case with string in Linq where clause
我尝试在我的 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
}
错误是'无法将 lambda 表达式转换为类型 'string' 因为它不是委托类型'(我添加了 System.Linq
)和 无法将类型 'string' 隐式转换为 'bool'。
如何将 switch-case
语句与 string
值一起使用?
感谢大家的回答。
当然它会给你一个错误,因为 LINQ where 子句期望结果应该是真或假的逻辑。
你的逻辑是 (v.RealBarcode == null) ? StartBarcode : v.RealBarcode 其中 returns 只是字符串。
如果我们将您的 linq 翻译成英语,它听起来像:
Select Barcode
的一些值
听起来应该像:
Select 条形码等于某物的一些值
我认为你的逻辑应该是这样的
where v.RealBarcode == (v.RealBarcode == null) ? StartBarcode : v.RealBarcode
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,所以这可能是不可能的,你必须稍后创建实际的对象。
我尝试在我的 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
}
错误是'无法将 lambda 表达式转换为类型 'string' 因为它不是委托类型'(我添加了 System.Linq
)和 无法将类型 'string' 隐式转换为 'bool'。
如何将 switch-case
语句与 string
值一起使用?
感谢大家的回答。
当然它会给你一个错误,因为 LINQ where 子句期望结果应该是真或假的逻辑。
你的逻辑是 (v.RealBarcode == null) ? StartBarcode : v.RealBarcode 其中 returns 只是字符串。
如果我们将您的 linq 翻译成英语,它听起来像:
Select Barcode
的一些值听起来应该像:
Select 条形码等于某物的一些值
我认为你的逻辑应该是这样的
where v.RealBarcode == (v.RealBarcode == null) ? StartBarcode : v.RealBarcode
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,所以这可能是不可能的,你必须稍后创建实际的对象。