我在Windows 10.1和SQL Sever 2016中的Visual Studio 15下工作。我的系统通过将CSV文本文件导入数据表来处理CSV文本文件,然后使用从数据表中获取的值更新SQL表。
我正在尝试使用LINQ JOIN语句,如下所示:
int b = 222;
int *p = new int(111);
int& refb = b; // evaluated to the storage of b;
int& refp = *p; // evaluated to the storage in dynamic memory, pointed by p;
int& illegal = 2; // ERROR: not a lvalue;
dt是数据表,db是SQL数据库的实体框架表示。我将dt限制为只有3条记录进行测试。
当评估foreach语句时,它会继续进行评估,直到内存不足为止。
下面的解决方案有效,所以我不认为这是一个数据问题:
var books = from x in dt.AsEnumerable()
join y in db.BookFiles.AsEnumerable()
on
new {printid = x.Field<string>("PrintID"), packageid = x.Field<string>("PackageID")}
equals
new {printid = y.PrintId, packageid = y.PackageID}
select y;
foreach(var book in books)
{
\\Do Something
}
我是否错误地设置了JOIN?我先尝试使用db,然后再使用连接中的数据表。我已经尝试为已连接的字段使用已定义的类。任何信息都会有所帮助。
答案 0 :(得分:0)
删除AsEnumerable()(它会将所有表加载到内存中,你不需要在加入之前使用它)并添加ToList()(在那一刻会有真正的数据库查询)到foreach中的书籍,就像这样< / p>
var books = from x in dt
join y in db.BookFiles
on
new { printid = x.Field<string>("PrintID"), packageid = x.Field<string>("PackageID") }
equals
new { printid = y.PrintId, packageid = y.PackageID }
select y;
foreach (var book in books.ToList())
{
\\Do Something
}