Linq语法问题

时间:2009-06-15 17:31:57

标签: c# linq

我遇到了一些LINQ语法的问题,我相信我在这里缺少一些非常简单的东西。

我有一个基本类定义为:

public class ParseData
{
    public int Offset { get; set; }
    public int Length { get; set; }
    public string AssociatedCode { get; set; }
}

我有一些将要处理的类项目的集合:

public ObservableCollection<ParseData> OffsetList { get; set; }

我有一个查询此集合的方法,以查看是否有任何符合特定条件的条目,以及是否有任何do,将以不同方式处理涉及的项目。

这是我正在使用的语法(在while循环中首先使用LINQ语法):

private void ParseText()
{
     //Prep code for while loop
    while (currentSpacePosition != -1)
    {
        var possibleOffset = OffsetList.Where(offset => offset.Offset.Equals(currentCursorPosition)).ToList<ParseData>();
        nextCursorPosition = currentSpacePosition + 1;
        currentTextBlock = Text.Substring(currentCursorPosition,(currentSpacePosition - currentCursorPosition) + 1);
        if (possibleOffset.Count != 0)
        {
            //Process one way;
            AddHyperlinkButton(currentTextBlock);
        }
        else
        {
                       //Process another way.
            AddTextBlock(currentTextBlock);
        }
        currentCursorPosition = nextCursorPosition;
        currentSpacePosition = Text.IndexOf(' ', currentCursorPosition);
    }
    //More processing
}

我在这里缺少什么? poosibleOffset变量保持返回一个空列表,但是如果我单步调试代码,OffsetList中有一个项目包含一个符合我的选择标准的偏移prerty,这表明我的语法在尝试时不正确检查值。

如果您需要更多有关流程的代码或信息,我们很乐意提供。

提前致谢。

干杯,

史蒂夫

4 个答案:

答案 0 :(得分:1)

你真正使用Linq并没有错:

    public class ParseData
    {
        public int Offset { get; set; } 
    }

    public ObservableCollection<ParseData> OffsetList { get; set; }

    public Program()
    {
        OffsetList = new ObservableCollection<ParseData> { new ParseData { Offset = 5 } };
        int offset = 5;
        int found = OffsetList.Where(o => o.Offset.Equals(offset)).ToList().Count;
        Console.WriteLine("Found: " + found);
    }

输出:

Found: 1

答案 1 :(得分:0)

我相信你正在遇到“访问修改后的关闭”问题。您需要在Where子句之前将currentSpacePosition复制到本地临时变量中,然后在where条件中使用它。

答案 2 :(得分:0)

您能否告诉我 currentCursorPosition 变量的类型是什么? 例如,如果它是long类型,编译器将选择使用Int32的Equals(object)重载,在这种情况下,即使变量在数学上与Offset属性中的值相等,它也会返回false。

答案 3 :(得分:0)

女士们,先生们,请允许我为浪费宝贵的时间而道歉。然而,我是一个大笨蛋。在调试一些问题的过程中,我注释掉了初始化属性OffsetList的代码,这是我搜索条件中的关键元素。如果我之前注意到这一点,那么LINQ查询将首次出现在门外。

感谢所有试图拯救我自己愚蠢的人。我会暂时提出这个问题,这样你就可以指出并大笑,然后我会关闭。