2013-02-16 26 views
0

我需要加入DataTable和使用LINQ的SQL表。如何使用LINQ加入數據表和SQL表

這是LINQ查詢:

from c in db.Staging 
join c1 in tagging on c.RPT_ID equals c1.RPT_ID 
select c 

但是我收到以下錯誤:

System.NotSupportedException: Local sequence cannot be used in LINQ to SQL implementations of query operators except the Contains operator.

回答

0

你只能這樣做,如果所有要加入的記錄都在先記憶。您需要執行以下操作。

var s = db.Staging.ToList(); 
var joinedResult = from c in s 
       join c1 in tagging on c.RPT_ID = c1.RPT_ID 
       select c; 

調用ToList()會導致SQL執行並從數據庫中提取所有記錄。如果數據庫中有大量記錄,這不太好。

你可能想要做的事實際上是以下幾點。

var IDs = tagging.Select(t=>t.RPT_ID).ToArray(); 
var matches = db.Staging.Where(s=>IDs.Contains(s.RPT_ID); 

這隻會在您的數據表中找到DB中的臨時記錄。如果你有一個大的臨時表,效率會更高。

+0

您可以在vb.net中分享第二個選項的語法 – 2013-02-16 11:23:34

0

試試這個:

from c in db.Staging 
join c1 in tagging on c.RPT_ID = c1.RPT_ID 
select c 

我沒有VS確認,但我認爲這是打破了「等於」,因爲它是一個內置的.NET功能。 LINQ無法將所有函數轉換爲TSQL。

0
db = new YourContext(); 
MyClass t = new MyClass(); 
var listOfIEnumerableData = from myClass in t.GetMyClassData() 
          select new MyClass { ID = myClass.ID, Name=myClass.Name,Description=myClass.Description}; 

var v = (from t1 in db.DbClass.AsEnumerable() 
     join t2 in listOfIEnumerableData on t1.DbClassFK equals t2.ID 
     select new VmMyClass 
      { 
       MyClass = t1, 
       DbClass = t2 
      }).OrderByDescending(x => x.Acc_Chart1.ID).Take(100).AsEnumerable(); 

this.DataList = v; 
+0

此代碼完全可行。使用IEnumerable Collection加入SQL表 – 2017-03-06 10:22:32

+0

我有這個Collection,public IEnumerable GetMyClassData() { List lst = new List (); MyClass a = new MyClass ID = 1, Name =「ASSETS」, Description =「Assets Info」 }; MyClass l = new MyClass { ID = 2, Name =「LIABILITIES」, DrIncrease =「負債」 }; lst.Add(a); lst.Add(l); return lst; }和一個Sql表名DbClass,加入 – 2017-03-06 10:47:09

+0

您可以[編輯](http://stackoverflow.com/posts/42622821/edit)您的答案進一步的代碼。我會解釋你的代碼_does_ – Bugs 2017-03-06 10:57:57