我从这个问题(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;?之外的其他内容?或者你能以不同的方式建议我需要做什么吗?
提前致谢!
答案 0 :(得分:4)
你需要一个default
开关案例,为变量分配一些东西,否则在使用前没有明确分配。