0

我需要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 运算符除外。

4

3 回答 3

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 的暂存记录。如果你有一个大的临时表,效率会更高。

于 2013-02-16T08:04:14.497 回答
0

尝试这个:

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

我没有 VS 来确认,但我认为它打破了“等于”,因为它是一个内置的 .NET 函数。LINQ 无法将所有函数转换为 TSQL。

于 2013-02-16T08:06:14.140 回答
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;
于 2017-03-06T10:11:07.227 回答