LINQ to Dataset Left Join,如何计算空值

时间:2009-06-03 03:52:42

标签: linq

首先,看一下这个帖子

LINQ to Dataset DBNULL problem / null reference exception

上面的链接提供了如何LEFT JOIN,然后是SELECT列,其中包含NULL值,而不会出现异常错误。

我的问题是我想在WHERE子句中将COUNT列为空(在我的LEFT JOIN之后,列中会弹出一些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();

注释行是我尝试的解决方案,但它对我不起作用。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果您要问的是如何计算连接表为空的记录数,请尝试一下。

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();

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

答案 1 :(得分:0)

我没有测试过以下代码。希望这应该可行

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();