LINQ选择返回类型

时间:2012-03-18 18:05:50

标签: c# silverlight linq class

在我的域服务类中,我希望返回部分对象但不返回任何内容。

Silverlight代码:

private void button2_Click(object sender, RoutedEventArgs e)
{
     LoadOperation<Employees> loadOpKKM = this._employeeContext.Load(this._employeeContext.GetEmployeesById2Query(1));
     loadOpKKM.Completed += new EventHandler(loadOpKKM_Completed);
}

void loadOpKKM_Completed(object sender, EventArgs e)
{
     MessageBox.Show(loadOpKKM.Entities.Count().ToString());
}

域名服务类:

public IQueryable<Employees> GetEmployeesById2(int employeeId)
{    
    var query = from s in ObjectContext.Employees
                 where (s.EmployeeID == employeeId)
                 select new Employees()
                 {
                    Address = s.Address
                 };

    return query;
}

我在哪里做错了?

3 个答案:

答案 0 :(得分:0)

作为Silverming,GertArnold说你应该首先检查你的桌子是否设置正确。

private void button2_Click(object sender, RoutedEventArgs e)
{
     LoadOperation<Employees> loadOpKKM = this._employeeContext.Load(this._employeeContext.GetEmployeeByIDQuery(1));
     loadOpKKM.Completed += new EventHandler(loadOpKKM_Completed);
}

void loadOpKKM_Completed(object sender, EventArgs e)
{
     MessageBox.Show(loadOpKKM.Entities.Count().ToString());
}


[Query(IsComposable=false)]
public Employees GetEmployeeByID(int employeeID)
{
    return this.ObjectContext.Employees.Single(c => c.EmployeeID == employeeID);
}

检查您的域名服务,看看您是否没有出现任何错误或拼写错误

答案 1 :(得分:0)

如图所示,您应该无法访问loadOpKKM内的loadOpKKM_Completed。它超出了该方法的范围(除非您有另一个同名属性,否则不应编译)。

我猜你实际上正在访问你网页上另一个名为loadOpKKM的属性(由于它不是临时加载的,因此将为空)。检查您的设计器文件中的该页面,看看您是否还有一个名为loadOpKKM的属性/控件。

如果没有,请列出该页面的所有代码(包括设计师文件)。

答案 2 :(得分:0)

正如@Hitech Magic所说,loadOpKKM超出了该方法的范围。

尝试使用它:

private void button2_Click(object sender, RoutedEventArgs e)
{
     LoadOperation<Employees> loadOpKKM = this._employeeContext.Load(this._employeeContext.GetEmployeeByIDQuery(1));
     loadOpKKM.Completed += new EventHandler(loadOpKKM_Completed);
}

void loadOpKKM_Completed(object sender, EventArgs e)
{
     LoadOperation<Employees> loadOpKKM = (LoadOperation<Employees>)sender;
     if(loadOpKKM != null)
     {
         MessageBox.Show(loadOpKKM.Entities.Count().ToString());
     }
     else
     {
         //TODO
     }
}