2011-03-02 77 views
2

問題:我想從代碼中填充一個LINQ表,而不是DataBase。在代碼中填充LINQ表?

可能嗎?

System.Data.Linq.Table<Question> myquestions = new System.Data.Linq.Table<Question>(); 

然後是這樣的:

myquestions.Rows.Add(aquestion); 

回答

3

只是填充一個普通的DataTable,你可以從LINQ

using System; 
using System.Data; 

namespace ConsoleApplication10 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     var dt = new DataTable(); 
     dt.Columns.Add("Id", typeof(int)); 
     dt.Columns.Add("Project Name", typeof(string)); 
     dt.Columns.Add("Project Date", typeof(DateTime)); 

     for (int i = 0; i < 10; i++) 
     { 
     var row = dt.NewRow(); 
     row.ItemArray = new object[] { i, "Title-" + i.ToString(), DateTime.Now.AddDays(i * -1) }; 
     dt.Rows.Add(row); 
     } 

     var pp = from p in dt.AsEnumerable() 
       where (int)p["Id"] > 2 
       select p; 

     foreach (var row in pp) 
     { 
     Console.WriteLine(row["Id"] + "\t" + row["Project Name"] + "\t" + row["Project Date"]); 
     } 

     Console.ReadLine(); 
    } 
    } 
} 

用它在上面的代碼中,你可以看到如何使用LINQ過濾從DataTable中刪除某些記錄。您需要將System.Data.DataSetExtensions程序集添加到您的引用

IEnumerables是隻讀的,所以您不能按照您的要求真正做到,但我所呈現的是正確的方式。

+0

錯誤:System.Data.DataTable不包含AsEnumerable的定義...(.NET 4.0,ASP.NET MVC 3) – 2011-03-02 07:55:39

+0

.AsEnumerable()方法在名爲System.Data.DataSetExtensions的另一個程序集中可用,所以您將需要添加對該程序集的引用。通常在新項目(Vs.NET 2010)中默認添加此程序集。 – 2011-03-02 08:02:04

+0

因爲他在示例中完全限定了他的表格,所以我認爲OP可能沒有包含System.Linq命名空間?編輯:Ninja'd – 2011-03-02 08:03:07

0

也許你誤解了一些東西。 LINQ是一種沒有副作用的查詢語言。因此你不能用它填充任何結構。您只能針對任何現有信息創建查詢並進行某種轉換或過濾。

之後,您可以使用此查詢使用foreach()ToList()ToArray()填補了一些元素,但你不能直接使用LINQ到任何元素插入一些其他的對象或集合。