【问题标题】:Inner Join in Wpf Mvvm ArchitectureWpf Mvvm 架构中的内连接
【发布时间】:2014-11-11 06:42:26
【问题描述】:

在我的 wpf mvvm 架构中,我有 2 个名为 部门和员工。DepartmentId 是员工表的外键。 我正在使用存储过程来获取数据。该过程运行良好,并在 sql management studio 中获取详细信息。 我的存储过程是

Select * from Employee e inner join Department d on e.DepartmentId = d.departmentId

在我的 mvvm 架构中,在 viewmodel 的 ObservableCollection 中选择员工详细信息时,部门名称没有得到。我们如何在 mvvm viewmodel 的 ObservableCollection 中获取 DepartmentName。

我的员工模型类是

public  class Employee
   {
public Employee()
       {
           this.Departments = new HashSet<Department>();
       }
       public long DepartmentId;
       public long EmployeeId;
       public string Name;
public virtual ICollection<Department> Departments { get; set; }
}
}

而我在视图模型中的 ObservableCollection 是

public ObservableCollection<Employee> GetEmployeeList()
{
var result = from p in dc.sel_Employee().AsEnumerable()
                       select new 
                       {
                           EmployeeId= p.EmployeeId,
                           Name = p.Name
                       };
return new ObservableCollection<Employee>(result);
}

显示的错误是

Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access.

谁能帮忙。在此先感谢。

【问题讨论】:

    标签: c# sql-server wpf mvvm linq-to-sql


    【解决方案1】:

    GetEmployeeList方法的返回类型更改为IList&lt;object&gt;ObservableCollection&lt;object&gt; 在 linq 中创建匿名类型,但不能返回匿名类型。

    您还可以搜索解决方案以从 linq 返回匿名类型

    【讨论】:

      【解决方案2】:

      或者你应该改变

      // your prev code
      select new 
      {
          EmployeeId= p.EmployeeId,
          Name = p.Name
      };
      

      // your prev code
      select new Employee()
      {
          EmployeeId= p.EmployeeId,
          Name = p.Name
      };
      

      在该解决方案中,您不使用匿名类型。但是如果dc.sel_Employee().AsEnumerable() 返回Employee 的可枚举集合,你应该省略select 子句:

      public ObservableCollection<Employee> GetEmployeeList()
      {
          return new ObservableCollection<Employee>(dc.sel_Employee().AsEnumerable());
      }
      

      没有 join 子句,但我认为这不是你真正的问题。如果您使用 EF(或不同的 ORM)并且正确定义了所有 FK,那么您不必担心联接。我会考虑的唯一一件事是使用ObjectQuery&lt;T&gt;.Include Method 方法。

      【讨论】:

        猜你喜欢
        • 2016-06-29
        • 2012-11-30
        • 2012-07-11
        • 2014-03-01
        • 2015-03-28
        • 1970-01-01
        • 2020-03-09
        • 1970-01-01
        • 2013-09-20
        相关资源
        最近更新 更多