如何在dataTable和Sql表之间创建Linq查询

时间:2018-01-20 12:34:50

标签: c# linq

我有一个DataTable和一个SQLTable。我想编写一个linq Qurty来创建一个包含来自两个表的信息的结果。我写了这段代码。但它运行得非常慢。我该如何优化呢?

 var Result = (from DataRow row in dTable.Rows
               from obj in db.SQLTable
                where (
                       obj.Status != "Suspend" &&
                       (
                         (obj.Type.ToLower() == "a" && obj.Code == 
                          row[2].ToString()) ||

                         (obj.Type.ToLower() == "b" && 
                            obj.Code.Substring(6) == row[2].ToString()) 

                        )

                select new
                          {

                              ID = obj.ID,
                              RowNum = row[0],

                          }).ToList();

2 个答案:

答案 0 :(得分:0)

尝试这样的事情

var result=(from e in db.Users
        select e.UserID).Except(from m in db.Fi
                                select m.UserID).ToList();

答案 1 :(得分:0)

我不确定这是否是100%正确的语法。

这里的想法是我们选择要加入的计算列。这样我们每行计算一次obj.Type.ToLower()和obj.Code.Substring(6)(n次),而不是每个连接实例计算一次(n * m次)。

var Result = (from DataRow row in dTable.Rows
               from obj in (db.SQLTable).Select(x => new {x.Status, ObjTypeLower = x.Type.ToLower(), x.Code, ObjCodeSub = x.Code.Substring(6)})
                where (
                       obj.Status != "Suspend" &&
                       (
                         (obj.ObjTypeLower == "a" && obj.Code == 
                          row[2].ToString()) ||

                         (obj.ObjTypeLower == "b" && 
                            obj.ObjCodeSub == row[2].ToString()) 

                        )

                select new
                          {

                              ID = obj.ID,
                              RowNum = row[0],

                          }).ToList();