Linq,join和null如何检查值

Adr*_*zot 0 c# linq windows-store-apps

我尝试将两个集合合二为一.如果我的第二个是空的,我只需要一个空值,这是我的代码(如果com不为空则它是正确的)

    var tmp = List{ Elem {long UserID; string tmpContent} };
    var com = List{ Comment{long UserID; string Content} } ;

    var res = from t in tmp
              group t by t.UserID into g
              join c in com on g.Key equals c.UserID
              select new AnswerSet(new List<Answer>(g), c.Content);
Run Code Online (Sandbox Code Playgroud)

我想获得AnswerSet(g, Content)AnswerSet(g, null)的问题,我想,是g.Key equals c.UserID时候com是空的

Kry*_*tos 6

基本上你想要的是一个左外连接.你可以通过使用join into而不仅仅是来做到这一点join.

var res = from t in tmp
          group t by t.UserID into g
          join c in com on g.Key equals c.UserID into j
          from subc in j.DefaultIfEmpty()
          select new AnswerSet(new List<Answer>(g), subc != null ?subc.Content : null);
Run Code Online (Sandbox Code Playgroud)