我在Windows 10.1和SQL Sever 2016的Visual Studio 15下工作。我的系统通过将CSV文本文件导入到数据表中然后使用值更新SQL表从数据表中获得。Linq加入数据表到实体框架 - 不评估结果
我试图使用LINQ JOIN声明如下:
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
}
DT是数据表和数据库是SQL数据库的实体框架表示。我只限于3个测试记录。
当对foreach语句进行评估时,它只是继续评估,直到内存不足。
以下作品的解决方案,所以我不认为这是一个数据问题:
List<BookFile> books = new List<BookFile>();
foreach (DataRow dr in dt.Rows)
{
string printid = dr.Field<string>("PrintID");
string packageid = dr.Field<string>("PackageID");
var book = (from data in db.BookFiles
where data.PrintId == printid && data.PackageID == packageid
select data).Single();
books.Add(book);
}
foreach(var book in books)
{
\\Do Something
}
我是否设置正确的加入?我已经尝试使用数据库,然后在连接中的数据表。我已经尝试对连接的字段使用定义的类。任何信息都有帮助。
'AsEnumerable()'在这里调用'db.BookFiles.AsEnumerable()'导致'BookFiles'表被完全加载到内存中。对于这样的场景,你最好使用第二种方法。 –