【问题标题】:LINQ: Field is not a reference fieldLINQ:字段不是参考字段
【发布时间】:2010-12-07 19:05:04
【问题描述】:

我有一个 IQueryable 列表。我正在尝试将此列表拆分为与第一个列表中某个字段(例如 fieldnum)匹配的 IQueryable 数组...

例如,如果 fieldnum == 1,它应该进入数组 [1]。我正在使用 Where() 根据该字段进行过滤,它看起来像这样:

var allItems = FillListofMyObjects();        
var Filtered = new List<IQueryable<myObject>(MAX+1);

for (var i = 1; i <= MAX; i++)
{
        var sublist = allItems.Where(e => e.fieldnum == i);
        if (sublist.Count() == 0) continue;

        Filtered[i] = sublist;
}

但是,我在 if 行收到错误 Field "t1.fieldnum" is not a reference field。单步调试调试器显示错误实际上发生在之前的行(Where() 方法),但无论哪种方式,我都不知道自己做错了什么。

我对 LINQ 很陌生,所以如果我做错了,请告诉我,谢谢!

【问题讨论】:

  • 当您收到该错误时 allItems 是否为空?
  • 不,它填充了 MyObject 类型的 IQueryable。

标签: linq data-structures where-clause iqueryable


【解决方案1】:

你为什么不直接使用ToLookup

var allItemsPerFieldNum = allItems.ToLookup(e => e.fieldnum);

每次获取值时是否需要重新计算表达式?

【讨论】:

  • 有趣!这是我第一次听说 ToLookup 方法,我试试看,谢谢!
  • 哇,效果很好!谢谢,不知道原来的错误是什么,但这完全没有问题,谢谢!
【解决方案2】:

为什么不用字典?

var dictionary = allItems.ToDictionar(y => y.fieldnum);

【讨论】:

  • 因为每个fieldnum 可以有多个对象,ToLookup 是更好的数据结构,但是谢谢!
猜你喜欢
  • 2022-01-02
  • 2019-01-15
  • 2013-06-30
  • 2014-02-03
  • 2016-10-31
  • 2016-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多