【发布时间】:2023-03-06 05:56:01
【问题描述】:
我有两个使用 linq 执行左连接的数据表。当我使用 JOIN 时它确实有效,但由于在使用左连接时它在结果数据中有一些空值,所以它不起作用。下面是代码
DataTable dt1 = user.getData();
DataTable dt2 = user.getOldData();
var results = from p2 in dt2.AsEnumerable()
join p1 in dt1.AsEnumerable()
on p2["XPNNUM"].ToString() equals (string)p1["pid"]
into a
from b in a.DefaultIfEmpty()
select new
{
XPNNUM = p2["XPNNUM"].ToString(),
XPNNAM = (string)p2["XPNNAM"],
XPNGRD = (string)p2["XPNGRD"],
user_id = b["user_id"].ToString(),
firstname = b["firstname"].ToString(),
usertype = b["usertype"].ToString(),
subid = b["subid"].ToString(),
};
如果数据如下所示,这将不起作用,并且它会给出未设置为实例错误的对象引用。
+--------+--------+--------+---------+-----------+----------+-------+
| XPNNUM | XPNNAM | XPNGRD | user_id | firstname | usertype | subid |
+--------+--------+--------+---------+-----------+----------+-------+
| 12 | Test | 4 | null | null | null | null |
+--------+--------+--------+---------+-----------+----------+-------+
有没有更好的方法来做同样的事情?由于数据表来自两个不同的来源,因此无法在 SQL 端执行此操作。
【问题讨论】: