回答
您好,您可能希望加入在運行時生成的兩個數據表。看看這個鏈接。當你說「與動態列數據表」可能是你
Finding common columns from two datatable and using those for Join condition in LINQ
Thanks}中提及特定的列。這也適用於我。 – 2011-03-15 04:23:52
一個簡單的方法是在表上使用AsEnumerable()並將它們連接到公共列數據上。
讓我們假設你的表是這樣的:[Table1] -> [ID] [Name] [Location] | [Table2] -> [ID] [Description]
和ID列具有相同的價值觀
DataTable table1 = new DataTable();
table1.Columns.Add("ID", typeof(int));
table1.Columns.Add("Name", typeof(string));
table1.Columns.Add("Location", typeof(string));
table1.Rows.Add(1, "Name1", "Location1");
table1.Rows.Add(2, "Name2", "Location2");
table1.Rows.Add(3, "Name3", "Location3");
DataTable table2 = new DataTable();
table2.Columns.Add("ID", typeof(int));
table2.Columns.Add("Description", typeof(string));
table2.Rows.Add(1, "Description1");
table2.Rows.Add(2, "Description2");
table2.Rows.Add(3, "Description3");
然後你只需要加入對ID列的表,並選擇所產生的數據集
var joinedTables = from data1 in table1.AsEnumerable()
join data2 in table2.AsEnumerable() on data1.Field("ID") equals data2.Field("ID")
select new { id= data1.Field("ID"),
name = data1.Field("Name"),
loc = data1.Field("Location"),
desc = data2.Field("Description")
};
得到的數據:
id name loc desc
1 Name1 Location1 Description1
2 Name2 Location2 Description2
3 Name3 Location3 Description3
Acrtally我需要所有列來自這兩個表和只有一個共同的列。在選擇聲明中,我不想在選擇新{ – 2011-03-11 11:48:09
這是沒有這很容易,更重要的是不使用ExpandoObject
,因爲LINQ通常被調整爲生成強類型對象,在編譯時需要知道該模式。我看到這種情況出現的一個方法是通過合成方法通過改造,該方法會生成一個動態對象與所有發現的油田
public ExpandoObject CombineMe(DataRow r1, DataRow r2)
{
dynamic x = new ExpandoObject();
x.ID = r1.Field<int>("ID");
x.Name = r1.Field<string>("Name");
// use Expando as dictionary
IDictionary<String, Object> xd = (IDictionary<String, Object>)x;
// enumerat both rows for all columns not ID and Name and add to Expando
foreach (DataColumn c in r1.Table.Columns)
if (c.ColumnName != "ID" && c.ColumnName != "Name")
xd.Add(c.ColumnName, r1[c]);
foreach (DataColumn c in r2.Table.Columns)
if (c.ColumnName != "ID" && c.ColumnName != "Name")
xd.Add(c.ColumnName, r2[c]);
return x;
}
/// .... further down
var p = from a in table1.AsEnumerable()
join b in table2.AsEnumerable() on a.Field<int>("ID") equals b.Field<int>("ID")
select CombineMe(a, b);
選擇在LINQ的組合被調用並不完全像SQL選擇,它只是提供了一個簡單,複雜甚至是外部調用代碼的轉換佔位符。
注意:如果您不想使用動態,則可以類似地通過首先枚舉兩個表中的所有列並創建第三個表來創建解決方案。然後將CombineMe更改爲生成DataRow
而不是ExpandoObject
,最後枚舉p並將其所有條目(DataRow
的組合實例)添加到結果表中。
- 1. 使用LINQ使用兩個鍵列加入兩個數據表
- 2. 如何使用LINQ加入數據表和SQL表
- 3. 動態LINQ查詢的數據表
- 4. 添加條件動態加入Linq
- 5. LINQ:如何使用動態密鑰連接兩個數據表
- 6. Linq使用動態庫示例數據表?
- 7. 使用Linq插入數據
- 8. 動態表名linq-to-sql動態LINQ
- 9. Linq動態表
- 10. 動態添加列在jQuery的數據表並插入數據
- 11. SQL動態加入到用戶/數據提供表
- 12. 插入動態數據從數據列表導入數據庫
- 13. 加入使用LINQ
- 14. 使用動態表colums和Linq到sql
- 15. C#LINQ動態表
- 16. 動態加入分層數據
- 17. 在動態列數上加入2個數據表
- 18. 如何使用LinQ加入(鍵入)數據集?
- 19. Linq加入表並使用包含
- 20. 使用API數據創建動態表
- 21. 動態LINQ加入DataTable上的動態列
- 22. 存儲使用JSON輸入的動態表單和數據
- 23. 使用Thymeleaf動態插入數據到JavaScript圖表
- 24. 創建動態數據輸入表格
- 25. 使用反射和LINQ動態LINQ
- 26. LINQ根據動態列表更新數據庫排序順序
- 27. 如何使用動態數據數組輸入JSON數據?
- 28. 使用linQ將數據從一張表插入另一張表
- 29. 向Html表添加動態數據?使用Jquery?
- 30. 動態地向表中添加數據
有用的,你到底是什麼意思?它是無類型的'DataTable',它是'ExpandoObject'或'DynamicObject'派生實例的列表,還是完全不同的東西? – mmix 2011-03-11 10:45:56
其實一個存儲過程將返回兩個ID爲ID的表,Name作爲兩個表中的公共列。它們將具有相同的列數,但列名不同。我們需要組合這兩個表 – 2011-03-11 12:00:57