【发布时间】:2017-08-18 08:07:57
【问题描述】:
我在 Windows 10.1 和 SQL Sever 2016 中的 Visual Studio 15 下工作。我的系统通过将 CSV 文本文件导入数据表来处理它们,然后使用从数据表中获得的值更新 SQL 表。
我正在尝试如下使用 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 是数据表,db 是 SQL 数据库的实体框架表示。我将 dt 限制为仅 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
}
我是否错误地设置了 JOIN?我尝试先使用数据库,然后再使用连接中的数据表。我尝试为连接字段使用定义的类。任何信息都会有所帮助。
【问题讨论】:
-
AsEnumerable()call heredb.BookFiles.AsEnumerable()导致BookFiles表完全加载到内存中。对于这种情况,您最好使用第二种方法。
标签: c# sql entity-framework linq join