我需要使用LINQ加入DataTable
和SQL表。
这是LINQ查询:
from c in db.Staging
join c1 in tagging on c.RPT_ID equals c1.RPT_ID
select c
但是我收到以下错误:
System.NotSupportedException:除了Contains运算符之外,本地序列不能用于查询运算符的LINQ to SQL实现。
答案 0 :(得分: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);
只能在数据库中找到数据表中具有ID的暂存记录。如果你有一个很大的临时表,效率会更高。
答案 1 :(得分:0)
试试这个:
from c in db.Staging
join c1 in tagging on c.RPT_ID = c1.RPT_ID
select c
我没有VS确认,但我认为它打破'等于',因为它是内置的.NET功能。 LINQ无法将所有函数转换为TSQL。
答案 2 :(得分: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;