【问题标题】:Error when trying to "where" on strongly typed list, error CS0103尝试在强类型列表上的“位置”时出错,错误 CS0103
【发布时间】:2018-03-27 01:32:26
【问题描述】:

我有 linq,它通过 id 连接两个列表并返回强类型列表:

   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();

出现了那个错误:

“TestowaKlasaDlaLinq”类型的强类型列表的强字段怎么可能在该上下文中不存在?

【问题讨论】:

  • 应该可以 - 你有错字吗?
  • 不,我没有。
  • 只是为了检查,试试这个: var onlyGdansk = linqlambda.Where(tkdl => tkdl.Miasto.Equals("Gdańsk")).Select(dl => dl).ToList();
  • 我认为,其中一个 x.Miasto 值为 null,这就是原因,它向您显示了此错误。试试 var ar onlyGdansk = linqlambda.Where(tkdl => tkdl.Miasto!=null && tkdl.Miasto.Equals("Gdańsk")).Select(dl => dl).ToList();

标签: c# linq join


【解决方案1】:

我认为,其中一个 x.Miasto 值为 null,这就是原因,它向您显示了此错误。

var onlyGdansk = linqlambda.Where(tkdl => tkdl.Miasto!=null && tkdl.Miasto.Equals("Gdańsk")).Select(dl => dl).ToList(); 

【讨论】:

  • 您可以再简化一点:tkdl.Miasto?.Equals("Gdańsk") == true。还值得一提的是,.Select(dl =&gt; dl) 什么都不做,因此在这里是多余的
【解决方案2】:

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()

【讨论】:

  • 那就更好了。谢谢。
猜你喜欢
  • 2015-10-22
  • 2018-06-19
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 2019-03-02
相关资源
最近更新 更多