LINQ到数据集左连接,如何计算空值

LINQ到数据集左连接,如何计算空值,linq,Linq,首先,看一下这个线程 上面的链接提供了如何左连接,然后选择其中包含NULL值的列,而不会出现异常错误 我的问题是我想在WHERE子句中计算列为null(在我的左连接之后,列中会弹出一些null值),类似这样: int tmp1 = ( from n in dt_query join m in dt_query2 on n.Field<string>("VC_CLIENT_MAXID") equals m.Field<string>("VC_CHAT_MAXID")

首先,看一下这个线程

上面的链接提供了如何左连接,然后选择其中包含NULL值的列,而不会出现异常错误

我的问题是我想在WHERE子句中计算列为null(在我的左连接之后,列中会弹出一些null值),类似这样:

int tmp1 = 
(
from n in dt_query
join m in dt_query2 
on n.Field<string>("VC_CLIENT_MAXID") equals m.Field<string>("VC_CHAT_MAXID") into nm
from m in nm.DefaultIfEmpty()
where 
    //string.IsNullorEmpty(m.Field<string>("VC_CHAT_STAFF"))
    //DBNull.Value.Equals(m.Field<string>("VC_CHAT_STAFF"))
    //m.IsNull("VC_CHAT_STAFF")
    //object.Equals(m.Field<string>("VC_CHAT_STAFF"), xxx) <<< String xxx = null on above
    select n.Field<string>("VC_CLIENT_MAXID")
    ).Count();
inttmp1=
(
dt_查询中的from n
在dt_query2中加入m
在n.Field(“VC\U客户端\U最大ID”)上等于m.Field(“VC\U聊天\U最大ID”)到nm
从m开始,单位为nm.DefaultIfEmpty()
哪里
//string.IsNullorEmpty(m.Field(“VC\u CHAT\u STAFF”))
//DBNull.Value.Equals(m.Field(“VC_CHAT_STAFF”))
//m、 IsNull(“VC\U聊天人员”)

//object.Equals(m.Field(“VC_CHAT_STAFF”),xxx)如果您要问的是如何计算联接表为空的记录数,那么请尝试一下

int tmp1 = 
    (
    from n in dt_query
    join m in dt_query2 
    on n.Field<string>("VC_CLIENT_MAXID") 
        equals m.Field<string>("VC_CHAT_MAXID") into nm

    from LeftJoinM in nm.DefaultIfEmpty()
    where 

        LeftJoinM  == null

    select n.Field<string>("VC_CLIENT_MAXID")
    ).Count();
inttmp1=
(
dt_查询中的from n
在dt_query2中加入m
在n.Field(“VC\U客户端\U最大ID”)
等于m.Field(“VC\u CHAT\u MAXID”)到nm
从nm.DefaultIfEmpty()中的LeftJoinM
哪里
LeftJoinM==null
选择n.Field(“VC\U客户端\U最大ID”)
).Count();

如果我误解了您的意思,请在评论中告诉我,我很乐意更新。

我还没有测试以下代码。希望这能起作用

int tmp1 = 
        (
        from n in dt_query
        join m in dt_query2 
        on n.Field<string>("VC_CLIENT_MAXID") 
            equals m.Field<string>("VC_CHAT_MAXID") into nm

        from temp in nm.where(t => t.Field<string>("VC_CLIENT_MAXID") ==null).DefaultIfEmpty()


        select VC_CLIENT_MAXID=  (temp== null) ? "" :n.Field<string>("VC_CLIENT_MAXID");
        ).Count();
inttmp1=
(
dt_查询中的from n
在dt_query2中加入m
在n.Field(“VC\U客户端\U最大ID”)
等于m.Field(“VC\u CHAT\u MAXID”)到nm
以nm为单位的from temp.where(t=>t.Field(“VC_CLIENT_MAXID”)==null.DefaultIfEmpty()
选择VC_CLIENT_MAXID=(temp==null)?“”:n.字段(“VC_CLIENT_MAXID”);
).Count();
这对我来说很有效(这次)!但我有件事要问你。“m==null”是什么意思?我想过滤掉指定列中的null对这不起作用(因为我无法分辨我检查了哪个列的null)。如果表A有VC_CLIENT_MAXID要加入,而表B中的VC_CHAT_STAFF从一开始就是空的,那该怎么办?我想我会得到错误的答案?我已经将m重命名为“LeftJoinM”,让它更清楚一点。“m==NULL”或现在的“LeftJoinM==NULL”基本上检查加入是否失败。它返回所有无法加入的记录。选择计数(*)从VC_CLIENT LEFT开始,在VC_CLIENT上加入VC_CHAT\u MAXID=VC_CHAT\u MAXID,其中VC_CHAT\u STAFF为NULL>我的观点是“m==NULL”不是翻译此查询的完美答案。如您所见,如果VC_CHAT中包含VC_CHAT\u STAFF NULL数据,我无法选择它,因为“m==NULL”只能提供加入失败的行。对吗?您将如何将此查询转换为LINQ语法?因为我在WHERE子句中尝试调用“m.Field”(“VC_CHAT_STAFF”)“时遇到NullException,非常感谢您的上述回答。这对我帮助很大!