我需要DataTable
使用 LINQ 连接一个和一个 SQL 表。
这是 LINQ 查询:
from c in db.Staging
join c1 in tagging on c.RPT_ID equals c1.RPT_ID
select c
但是我收到以下错误:
System.NotSupportedException:本地序列不能在查询运算符的 LINQ to SQL 实现中使用,但 Contains 运算符除外。
只有当您加入的所有记录都首先在内存中时,您才能执行此操作。您需要执行以下操作。
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 的暂存记录。如果你有一个大的临时表,效率会更高。
尝试这个:
from c in db.Staging
join c1 in tagging on c.RPT_ID = c1.RPT_ID
select c
我没有 VS 来确认,但我认为它打破了“等于”,因为它是一个内置的 .NET 函数。LINQ 无法将所有函数转换为 TSQL。
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;