我环顾四周寻找答案,我发现的内容与我正在做的相似,但并没有让它完全正确。我可以在它们是列表时加入两个实体,但不能在它们是单个对象时加入。我不确定这是否有意义
这里我有两个实体对象
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
,因为我认为我应该得到。
我在这里做错了什么?
答案 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>
。