Я пытаюсь создать функцию для захвата списка <>() типа «tableContact», который является сущностью (вроде как, когда вы делаете простой оператор select: query.ToList();)Entity Framework присоединиться к функции в функции
Но это становится расстраивающим, потому что я продолжал получать ошибки «нулевого объекта ссылки». По какой-то причине инструкция «join» не работает, поэтому я попробовал альтернативный оператор linq.
У меня есть таблица Object2Contacts, в которой я хочу LEFT JOIN, и я ищу свой объект и пытаюсь увидеть все контакты для этого объекта. Я также не могу понять, как изменить «анонимный тип» обратно в таблицу сущностей.
Также не каждый объект имеет контакты, поэтому иногда должен быть возвращен нулевой список <>.
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);
}
EDIT Я также попытался:
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();
Тогда я не могу преобразовать его обратно в список и по-прежнему «нулевую ссылку».
EDIT 2 Да, запрос, который я запускаю, может определенно ввести «пустой» список. Я не возражаю против пустых списков, но не должен давать ссылку на объект null.
Я еще более смущен, как компилируется строка «on s.contact_id == o.contact_id», она должна быть «на s.contact_id равна o.contact_id». Также функции не могут возвращать анонимные типы, вы должны превратить этот тип в класс и вернуть его. В теории вы могли бы создать класс, связанный с контактами, и предоставить ему свойства, которые вы хотите использовать из обеих таблиц, а затем в выбранном элементе выберите новый тип_задачи (Propertyname = s.property, PropertyName = o.property). См. Ссылку http: // stackoverflow. com/questions/1070526/how-to-return-anonymous-type-from-c-sharp-method-that-uses-linq-to-sql – Bearcat9425
Правильно Я написал это неправильно. Я имел в виду «равный». Я не уверен, почему Линк, похоже, делает различие. Да, я запутался в анонимных типах и о том, как они работают. – Dexter
@Dexter - Вы не можете возвращать анонимные типы .. поэтому вы путаетесь о том, как это сделать. Вы должны вернуть конкретный тип. –