条件LINQ查询获取未分配的变量错误?

时间:2014-12-17 00:51:17

标签: c# linq

我从这个问题(linq with unassigned variable parameters)得知linq查询的延迟执行解释了为什么我得到一个未分配的变量错误,并且在过去这段代码已经正常工作:

    public static void LoadProjects()
    {
        CHOCoreDataContext dc = new CHOCoreDataContext();
        IEnumerable<ChoCore_Linq_WPF.PROJECT> query1;

        if (((MainWindow)System.Windows.Application.Current.MainWindow).chkShowActive.IsChecked == true)
        {
            query1 =
            from x in dc.PROJECTs
            orderby x.Experiment_Name
            where x.Active == "True" //filter for active projects only
            select x;
        }
        else
        {
            query1 =
            from x in dc.PROJECTs
            orderby x.Experiment_Name
            select x;
        }

        List<ProjectID> items = new List<ProjectID>();
        foreach (var thing in query1)
        {
            items.Add(new ProjectID() { pName = thing.Experiment_Name, pActive = thing.Active, pNotes = thing.Notes }); //creates an "item" with the two properties
        }

        ((MainWindow)System.Windows.Application.Current.MainWindow).lbxProjects.ItemsSource = items; //bind the listbox to the items list
    }

我在IF语句之前声明了查询,它运行正常。但是,在另一种方法中,我尝试使用SWITCH语句完成相同的操作:

    public static bool ProjectExists(string myProjectID, modPID _modPID)
    {
        CHOCoreDataContext dc = new CHOCoreDataContext();
        IEnumerable<ChoCore_Linq_WPF.PROJECT> duplicate;

        switch (_modPID)
        {
            case (modPID.addPID):
                duplicate =
                   (from x in dc.PROJECTs
                    where x.Experiment_Name == myProjectID
                    select x);
                break;
            case (modPID.editPID):
                duplicate =
                    (from x in dc.PROJECTs
                     where x.Experiment_Name == myProjectID 
                        && x.PROJECTID_PK != FindProjectKey(myProjectID)
                     select x);
                break;
        }


        if (duplicate.Count() == 0)
        {
            return false;
        }
        else
        {
            return true;
        }

    }  

我在较低的IF语句中收到错误,即变量“duplicate”未分配。我明白这意味着什么,但我不明白为什么没有被分配。我想也许SWITCH语句混淆了变量的范围所以尝试了一个IF语句来构造linq查询,但是我得到了同样的错误。我是否需要以不同的方式键入查询,使用IEnumerable&lt;&gt;?之外的其他内容?或者你能以不同的方式建议我需要做什么吗?

提前致谢!

1 个答案:

答案 0 :(得分:4)

你需要一个default开关案例,为变量分配一些东西,否则在使用前没有明确分配。