尝试在强类型列表上执行“where”时出现错误,错误代码为CS0103。

3

我有一个 Linq 查询,它通过 id 将两个列表联接起来,并返回强类型 List:

   List<TestowaKlasaDlaLinq> linqlambda = ListDetailedData.Join(PlacesList, a => a.place.id, b => b.id, (a, b) =>
                new TestowaKlasaDlaLinq()
                {
                    Czas = a.startDate.TimeOfDay.ToString(),
                    Co = a.name,
                    Miasto = b.address.city,
                    Miejsce = a.organizer.designation
                }).ToList();

目前一切都正常。当我尝试筛选列表时出现问题,例如:

   var onlyGdansk = linqlambda.Where(x => x.Miasto.Equals("Gdańsk")).Select(x => x).ToList();

那个错误是这样的: enter image description here 为什么强类型列表“TestowaKlasaDlaLinq”的强字段在该上下文中不存在呢?请帮忙解决。

2
那应该可以工作 - 你有打错字吗? - Daniel A. White
只是为了检查,请尝试这个:var onlyGdansk = linqlambda.Where(tkdl => tkdl.Miasto.Equals("Gdańsk")).Select(dl => dl).ToList(); - Gaurang Dave
1
我认为,x.Miasto的某个值为空,这就是它显示此错误的原因。请尝试使用以下代码:var ar onlyGdansk = linqlambda.Where(tkdl => tkdl.Miasto!=null && tkdl.Miasto.Equals("Gdańsk")).Select(dl => dl).ToList(); - Gaurang Dave
@GaurangDave 那就是问题所在。非常感谢你! - bc291
1
如果你遇到了空引用异常,那么在问题中应该提到这一点,而不是我猜测的在调试过程中出现的一些奇怪错误。 - juharr
显示剩余4条评论
2个回答

3
我认为,x.Miasto的值之一为空,这就是显示该错误的原因。
var onlyGdansk = linqlambda.Where(tkdl => tkdl.Miasto!=null && tkdl.Miasto.Equals("Gdańsk")).Select(dl => dl).ToList(); 

1
你可以将它简化一些:tkdl.Miasto?.Equals("Gdańsk") == true。另外值得一提的是,.Select(dl => dl) 没有任何作用,在这里是多余的。 - Fabjan

0
Gauran Dave的答案的一个变体:不要将Equals函数放在属性Miasto的字符串上,因为该字符串可能为空,而是将Equals函数放在字符串“Gdańsk”上。您可以断言“Gdańsk”不为空。
var onlyGdansk = linqlambda.Where(x => "Gdańsk".Equals(x)))
    .Select(x => x) // this one can be omitted
    .ToList();

或者考虑使用String.Equals(string, string),在这里我认为它更易读一些:
var onlyGdansk = linqlambda.Where(x => String.Equals(x, "Gdańsk"))
    .Select(x => x) 
    .ToList()

那就更好了。谢谢。 - bc291

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接