如何将两个实体对象连接在一起?

时间:2016-12-07 00:23:39

标签: c# entity-framework linq join

我环顾四周寻找答案,我发现的内容与我正在做的相似,但并没有让它完全正确。我可以在它们是列表时加入两个实体,但不能在它们是单个对象时加入。我不确定这是否有意义

这里我有两个实体对象

Location location = VIPEF.Locations
    .Where(w => w.LocationID == id).FirstOrDefault<Location>();
Contact contact = VIPEF.Contacts
    .Where(w => w.ContactID == location.ContactID).FirstOrDefault<Contact>();

但是当我去写一个查询时:

var query = from a in location
            join b in contact on a <-- Thats where I get a problem

一旦我加入这两个我无法从位置获取ID,我得到的唯一选项是a.equals而不是a.LocationID,因为我认为我应该得到。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

您不需要Linq将两个对象连接在一起,您只需要编写一个新对象。使用object initialiser syntax

非常简单
var thing = new Thing //<-- Your class that has the combined properties you need
{
    LocationID = location.LocationID, 
    LocationName = location.Name,
    ContactName = contact.Name,
    ContactAddress = contact.Address,
    //etc...
};

或者,您可以一次性完成所有操作,而不是2次查询,然后是组合:

var things = from l in VIPEF.Locations
             join c in VIPEF.Contacts on l.ContactID equals c.ContactID
             where l.LocationID == id
             select new Thing
             {
                 LocationID = location.LocationID, 
                 LocationName = location.Name,
                 ContactName = contact.Name,
                 ContactAddress = contact.Address,
                 //etc...
             };

虽然它可能只有一个条目,但这会给你一个IEnumerable<Thing>