在 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,所以这可能是不可能的,你必须稍后创建实际的对象。