asp.net LinqDataSource通过join查询多个表

问题描述 投票:2回答:3

我目前正在使用LinqToSQL开发ASP.NET 4.5应用程序。我使用asp:GridView控件。在我的数据源查询方法中,我需要从SQL Server的2个表中查询几乎相同字段的所有数据。

我的DB类一:

private partial class AdOld 
{
   private int PK;
   private string Text; 
}

我的DB类二:

private partial class AdNew 
{
   private int PK;
   private string Text;
   private bool IsActive;
}

我对LinqDataSource1_SelectingGridView方法看起来像这样:

protected void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
   var ctx = new MyContext();

   var result = new MyContext().AdOld;
   // I would need to add a query to select something like MyContext().AdOld.AdNew into a Model of AdOld

   e.Result = result;
}

你知道如何(从2个表中选择*)在1个linq查询中查询多个表吗?除了表AdNew中的IsActive,我需要两个表的所有条目。

非常感谢!!

c# asp.net sql-server linq
3个回答
1
投票

你想做联盟吗?尝试这样的事情

var ao = ctx.AdOld.Select(x => new { x.PK, x.Text})
var an = ctx.AdNew.Select(x => new { x.PK, x.Text})
var query = ao.Union(ae);

1
投票

我将创建一个名为OldAndNew的新类,并将2个查询选择到该类的列表中。这样,您的新类可以为新数据集提供一些唯一标识符,因为可能存在重复的PK。

    public class OldAndNew
    {
      public int NewPK;
      public int OriginalPK;
      public string Text;
    }

然后:

int number = 0;
var listOfBoth = new List<OldAndNew>();
            var x = AdOld.Select(y => new OldAndNew()
            {
                NewPK = number++,
                OriginalPK = y.PK,
                Text = y.Text
            });
            var y = AdNew.Select(y => new OldAndNew()
            {
                NewPK = number++,
                OriginalPK = y.PK,
                Text = y.Text
            });
listOfBoth.Add(x);
listOfBoth.Add(y);

1
投票

试试这样的事情;

var query = from ao in AdOld
            from an in AdNew 
            select new
            {
                ao,
                an
            };

在你的情况下,你也可以使用Union;

var adOld = ctx.AdOld.Select(ao => new Ad { Pk = ao.PK, Text = ao.Text }).ToList();
var adNew = ctx.AdNew.Where(an => an.IsActive).Select(an => new Ad { Pk = an.PK, Text = an.Text }).ToList();
var result = adOld.Union(adNew).ToList();

public class Ad
{
    public int Pk { get; set; }

    public string Text { get; set; }
}
© www.soinside.com 2019 - 2024. All rights reserved.