2012-03-26 37 views
2

我有兩個對象如何使用linq語句進行查詢?

List<Report> 
List<Newsletter> 

我需要一定的屬性,如

Id 
Date 
Status 
text 

從兩個列表。有沒有一種方法來合併這些列表,並使用linq語句來查詢它作爲一個單獨的列表返回特定的屬性? 請幫忙。對象的

結構如下:

Report 
{ 
    int id, 
    datetime reportDate, 
    enum Status, 
    string text 
}; 

Newsletter 
{ 
    int id, 
    datetime newsletterDate, 
    string Status, 
    string text 
}; 
+1

有沒有辦法加入他們的行列?他們有共同的財產嗎? – Aliostad 2012-03-26 11:31:11

+0

最有趣的點。到目前爲止答案是肯定的;這是可能的 - 理論上。不知道你會如何做到這一點,因爲我甚至不知道他們有一個相似的結構。 – TomTom 2012-03-26 11:32:15

+0

CreatedBy屬性對於 – NewBie 2012-03-26 11:33:55

回答

6
var items = 
     reportList.Select(x => new { x.Id, x.Date, x.Status, x.text }) 
     .Concat(
     newsList.Select(x => new { x.Id, x.Date, x.Status, x.text })); 

更新,以平衡狀態屬性:

var items = 
     reportList.Select(x => new { x.Id, x.Date, Status = x.Status.ToString(), x.text }) 
     .Concat(
     newsList.Select(x => new { x.Id, x.Date, Status, x.text })); 
+0

兩個對象中的屬性Status有一些不匹配。我需要將其轉換爲字符串。我怎麼能在匿名對象內做到這一點? – NewBie 2012-03-26 11:40:19

+0

注意:Concat over Union,因爲似乎沒有要求刪除重複項。 – 2012-03-26 11:40:39

+0

@NewBie - 查看更新。 – 2012-03-26 11:42:23

4

假設兩個列表包含常見的列和應用它們之間的連接..

可以APLY加入,然後得到數據如下

var data = form a in lista 
join b in listb on 
a.id equals b.id 
select new {id=a.id, Date= b.Date, Status=a.Sttus, text=b.Text}; 

以下是二表用戶和userclient

之間加入的圖像

檢查爲文章全文:Case 4 - JOINING TWO TABLE

enter image description here

4
var reps = reposts.Select(r => new { Id = r.Id, Date = r.Date, Status = r.Status, Text = r.Text}); 
var news = newsletters.Select(n => new { Id = r.Id, Date = r.Date, Status = r.Status, Text = r.Text}); 
var result = reps.Union(news); 
3
var query = reports.Select(x => new { x.Id, x.Date, Status = Enum.GetName(typeof(Status), x.Status), x.Text }) 
.Union(news.Select(x => new { x.Id, x.Date, x.Status, x.Text })); 
+0

這不會在上述情況下工作。它返回了屬性類型不匹配的錯誤原因。 – NewBie 2012-03-26 11:38:54

+0

它顯示錯誤「匿名類型聲明無效」 – NewBie 2012-03-26 11:50:40

+0

你和Henk的答案是一樣的。我還有一個疑問。屬性名稱是否應該在選擇器部分中匹配?兩個對象的「ID」屬性名稱不同。類型是一樣的。 – NewBie 2012-03-26 11:58:45

相關問題