我有兩個表A和B,它們是完全獨立的,但都有一個time
列,其類型爲DateTime
。LINQ - 如何從兩個表中獲得n條記錄?
我需要寫一個簡單的LINQ查詢來獲得來自兩個表的10個最近(基於time
字段)記錄,在一個集合中?例如,此查詢可能會返回A的7條記錄和B - 10記錄的3條記錄。
我有兩個表A和B,它們是完全獨立的,但都有一個time
列,其類型爲DateTime
。LINQ - 如何從兩個表中獲得n條記錄?
我需要寫一個簡單的LINQ查詢來獲得來自兩個表的10個最近(基於time
字段)記錄,在一個集合中?例如,此查詢可能會返回A的7條記錄和B - 10記錄的3條記錄。
var _result = tableA
.Select(x => x.time)
.Union(tableB.Select(y => y.time))
.OrderByDescending(z => z.time)
.Take(10);
SOURCE
'z.time'無法識別......?而且,這似乎只返回'time'列,導致'_result'成爲'IQueryable
這個怎麼樣'變種_result = TABLEA \t \t \t .Union(tableB的) \t \t \t .OrderByDescending(Z => z.time) \t \t \t。取(10);'? –
似乎並不工作,因爲'Union'只希望'tableA'作爲參數。 –
我給你X-Com的例子。 讓你的表格存儲數據以便運送到x-com基地。 讓表A商店招募,表B商品物品。 要顯示已被運到基地按日期排序新兵和物品的清單:
//soldiers
public class RowA
{
public long Id {get;set;}
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime Date { get; set; }
}
//items
public class RowB
{
public long Id {get;set;}
public string ItemName { get; set; }
public decimal Quantity { get; set; }
public DateTime Date { get; set; }
}
List<RowA> TableA;
List<RowB> TableB;
public Form1()
{
InitializeComponent();
PrepareTestData();
int uniqueId = 0;
var result = (from a in TableA
//Map soldiers to anonymous
select new
{
UniqueId = uniqueId++,
InnerId = a.Id,
Name = a.FirstName + " " + a.LastName,
Date = a.Date,
})
.Union(from b in TableB
select new
{
UniqueId = uniqueId++,
InnerId = b.Id,
Name = b.ItemName,
Date = b.Date,
}).OrderByDescending(x => x.Date).ToList();
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = result;
}
void PrepareTestData()
{
TableA = new List<RowA>();
for (int i = 0; i < 7; ++i)
TableA.Add(new RowA
{
Id = i + 1,
FirstName = "Name" + i,
LastName = "Surname" + i,
Date = DateTime.Now.AddDays(-i)
});
TableB = new List<RowB>();
for (int j = 0; j < 4; ++j)
TableB.Add(new RowB
{
Id = j + 1,
ItemName = "Laser pistol",
Quantity = 7,
Date = DateTime.Now.AddDays(-j)
});
}
您還可以創建輸出記錄類:
public Form1()
{
InitializeComponent();
PrepareTestData();
int uniqueId = 0;
var result = (from a in TableA
//Map soldiers to ShipmentReportItem
select new ShipmentReportItem
{
UniqueId = uniqueId++,
InnerId = a.Id,
Name = a.FirstName + " " + a.LastName,
Date = a.Date,
})
.Union(from b in TableB
select new ShipmentReportItem
{
UniqueId = uniqueId++,
InnerId = b.Id,
Name = b.ItemName,
Date = b.Date,
}).OrderByDescending(x => x.Date).ToList();
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = result;
}
一個結果類將是有益的ASP.NET gridview如果你需要一些檢查或記錄。然後,當你定義了類型時,你將可以輕鬆訪問數據源項目,否則你將不得不獲取數據項類型,然後檢查其屬性等,從特定屬性獲取值。
如果你的表B還存儲人(有相同的列),你不需要映射,因爲行結構將是相同的。
您需要從表A連接表B.請看此頁:http://www.dotnetperls.com/join。它描述了LINQ如何實現連接。 – Carsten
表A和B中是否有其他列與「時間」列一樣常見?因爲你沒有指定你想要查詢的輸出記錄。如果兩個表格完全不同,則可以創建匿名輸出記錄。如果A和B具有與聯盟相同的列, – pawciu
這兩個表*可能*共享一列,具體取決於我的數據庫設計。你能舉兩個例子來表達你的意思嗎? –