LINQ加入和GroupJoin

时间:2011-01-25 12:30:36

标签: linq linq-to-sql

我有一个对象列表,这些对象可能有也可能没有联系信息:

            // Join contact
        query = query.Join(
        (new ContactRepository(this.Db)).List().Where(x => x.IsMainContact),
        x => new { x.ListItem.ContentObject.LoginId },
        y => new { y.LoginId },
        (x, y) => new ListItemExtended<ListItemFirm>
        {
            City = y.City,
            State = y.State,
            Country = y.Country
        });

这会在'LoginId'上进行内连接。但是我需要一个outter join,这样如果给定的LoginId不存在联系信息,它将为空。 请帮忙

感谢

1 个答案:

答案 0 :(得分:1)

您应该手动执行外部联接:

            var contacts = (new ContactRepository(this.Db)).List();
            query.Select(item => 
            {
                var foundContact = contacts.FirstOrDefault(contact => contact.Id == item.Id);
                return  new ListItemExtended<ListItemFirm>()
                    {
                        Id = item.Id,
                        City = foundContact != null ? foundContact.City : null,
                        State = foundContact != null ? foundContact.State : null,
                        Country = foundContact != null ? foundContact.Country : null,
                    };
            })

但请记住,如果您的Contact项是struct - 检查null是不正确的方法。使用Any()运算符而不是FirstOrDefault()。