函数中的实体框架联接语句

本文关键字:语句 框架 实体 函数 | 更新日期: 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"的函数。