函数中的实体框架联接语句
本文关键字:语句 框架 实体 函数 | 更新日期: 2023-09-27 18:21:29
我正试图创建一个函数来获取List<>()类型为"tableContact",它是一个实体(有点像执行简单的select语句时的情况:query.ToList();)
但这变得令人沮丧,因为我不断收到"空对象引用"错误。由于某些原因,"join"语句不起作用,所以我尝试了另一个linq语句。
我有一个Object2Contacts表,我想LEFT JOIN,我正在查找我的Object,并试图查看该Object的所有联系人。我也不知道如何将"匿名类型"改回实体表。
此外,并非每个对象都有联系人,因此有时会出现空列表<>应返回。
public List<tableContact> getContactsForObject(int oid)
{
if (oid > 0)
{
var query = (from s in entities.tableContacts
from o in entities.tableObject2Contacts
where s.contact_id == o.contact_id
where o.object_id == oid
select new { s });
if (query != null)
{
IEnumerable<tableContact> e = (IEnumerable<tableContact>)query.ToList();
return (List<tableContact>)e;
}
}
return new List<tableContact>();
}
然后我想循环遍历返回的对象。。。例如:
foreach ( tableContact c in MyList){
WriteLine(c.Name);
}
编辑我也试过:
List<tableContacts> contacts = (from s in entities.tableContacts
join o in entities.tableObject2Contacts
on s.contact_id equals o.contact_id
where o.object_id == oid
select s).ToList();
然后我无法将它转换回List,并且仍然是"null引用"。
编辑2是的,我正在运行的查询肯定会带来一个"空"列表。我不介意空列表,但它不应该给出"对象空引用"。
我编写的联接语句有点不同:
var query = (from s in entities.tableContacts
join o in entities.tableObject2Contacts
on new { ContactID = s.contact_id, ObjectID = oid }
equals new { ContactID = o.contact_id, ObjectID = o.objectID }
into oTemp
from o in oTemp.DefaultIfEmpty()
select new { s });
这将是一个使用linq的适当的左联接。也许您的NullReferenceException是由错误的联接或其他原因引起的。
Nevermind,"我也尝试过这个"实际上是正确的代码,但由于某种原因,我没有正确建立实体,因此返回null。
尽管我仍然对"anonymoustype"感到非常困惑,但我不知道如何生成返回"anonymoustype"的函数。