【问题标题】:how to combine the result from differentviews to IQueryable<T>如何将不同视图的结果组合到 IQueryable<T>
【发布时间】:2012-02-16 15:51:14
【问题描述】:

我有一个绑定到 Telerik RadGrid 的 PlanItems 列表,并有两个视图检索结果。每个视图获取不同的数据,所以我如何将这些数据获取到 IQueryable 中

public class PlanItems
{
    public int Id{get; set;}   
    public string Name { get; set; }
    public string HV { get; set; }
    public string StNumber { get; set; }
    public string LDNumber { get; set; }

    public string MSId { get; set; }
    public string CreatedBy { get; set; }
    public string Type { get; set; }

}

 I have 2 different views vw_Boys ,vw_Girls and Student Entity

首先我从学生实体中得到了boys_Id 和 Girls_Id

    public IQuerable<PlanItems> GetAllStudents()
        {
        var Id = from v in context.Student
                  .Include("SBoy") 
                  .Include("SGirl")                    
                  where v.CreatedBy_Id == user.Id
                  select v;
        var temp = unp.Select(a=>a.SBoy.boys_Id).Distinct();
        var temp1 = unp.Select(a => a.SGirl.girls_Id).Distinct();

           var vwboys = from nv in context.vw_boys
                 where(temp.Contains(nv.SId))
                 select nv;

        var vwgirls= from nv in context.vw_girls
                        where (temp1.Contains(nv.GId))
                        select nv;

         var Boysresult = from n in vwboys
                     select new PlanItems
                     {
                         Id = n.SId,
                         Name = n.Name,
                         HV = n.HV,
                         StNumber = n.SNumber,
                         LDNumber = n.LineNumber,
                         MSId = n.MasterId,
                         CreatedBy = n.USerName,
                        Type = n.SubjectType
                     };

        var GirlsResult = from n in vwgirls
                          select new UnplannedItems
                          {
                           Id = n.GiId,
                         Name = n.Name,
                         HV = n.GV,
                         StNumber = n.SujNumber,
                         LDNumber = n.Lid,
                         MSId = n.MasterId,
                         CreatedBy = n.USerName,
                        Type = n.SubjectType
                          };  

          }
           my telerikGrid sample

     <telerik:GridViewDataColumn Header="StudentID" IsReadOnly="True"    DataMemberBinding="{Binding ID, Mdde=OneWay}" />

如何从上述方法返回结果..如何将结果合并为一个。

【问题讨论】:

  • 你为什么要把它们分开,因为你对它们都做同样的事情?
  • 我不知道该怎么做..我们可以加入这些视图并检索数据

标签: wpf linq


【解决方案1】:

我会这样做。

像这样向你的类添加一个新属性。因为在其他情况下您可能必须将男孩与女孩分开:

public class PlanItems
{
    public int Id{get; set;}   
    public string Name { get; set; }
    public string HV { get; set; }
    public string StNumber { get; set; }
    public string LDNumber { get; set; }

    public string MSId { get; set; }
    public string CreatedBy { get; set; }
    public string Type { get; set; }
        //new property
    public bool IsUnplanned { get; set; }
}

像这样在它们之间使用连接:

var result= ( 
        from n in vwboys
        select new PlanItems
        {
            Id = n.SId,
            Name = n.Name,
            HV = n.HV,
            StNumber = n.SNumber,
            LDNumber = n.LineNumber,
            MSId = n.MasterId,
            CreatedBy = n.USerName,
            Type = n.SubjectType,
            IsUnplanned=false
        }
    ).Concat
    (
        from n in vwgirls
        select new PlanItems
        {
            Id = n.GiId,
            Name = n.Name,
            HV = n.GV,
            StNumber = n.SujNumber,
            LDNumber = n.Lid,
            MSId = n.MasterId,
            CreatedBy = n.USerName,
            Type = n.SubjectType,
            IsUnplanned=true
        }
    );

希望对你有帮助

【讨论】:

  • 嗨,我需要从另一个方法获取 MSId,因为视图不包含此列..GetMSID(int Id) ..并且此方法需要 Id n.SId 和 n.GiId。 .如何做到这一点?
  • 是数据库函数还是本地函数?
【解决方案2】:

您可以使用联合扩展方法联合 2 个不同的 IQueryable:

here 是一个例子

【讨论】:

    【解决方案3】:

    我不是 wpf 方面的专家,但在查看解决方案时,我认为您可以为 Boys 和 Girls 使用父类,然后添加到该类的列表中。

    假设 Boy 和 Girl 类都继承自 Person 类,然后创建

    List<Person> personList = new List<Person>()
    

    并将男孩和女孩添加到此列表中。

    我不确定这是否是您需要的解决方案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 2011-06-21
      • 2011-03-28
      • 2012-01-09
      • 1970-01-01
      相关资源
      最近更新 更多