LINQ选择返回类型

本文关键字:返回类型 选择 LINQ | 更新日期: 2023-09-27 18:28:07

在我的域服务类中,我想返回部分对象,但什么也不返回。

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;
}

我哪里做错了?

LINQ选择返回类型

作为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);
}

查看您的域服务,看看您是否没有犯任何错误或输入错误

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

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

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

正如@HitechMagic所说,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
     }
}