我有一个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();
答案 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();