Выберите строки из таблицы1 и все дочерние элементы из таблицы2 в объект - PullRequest
0 голосов
/ 06 января 2011

Я хочу получить данные из таблицы "Province_Notifiers", а также получить все соответствующие элементы из таблицы "Province_Notifier_Datas".В таблице "Province_Notifier" есть подсказка для ее идентификации (PK), в таблице "Province_Notifier_Datas" есть столбец с именем BelongsToProvinceID, который является внешним ключом для таблицы guid таблиц "Province_Notifier".

Я пробовал что-то вроде этого:

var records = from data in ctx.Province_Notifiers
              where DateTime.Now >= data.SendTime && data.Sent == false
              join data2 in ctx.Province_Notifier_Datas on data.Province_ID equals data2.BelongsToProvince_ID
              select new Province_Notifier
              {
                  Email = data.Email,
                  Province_ID = data.Province_ID,
                  ProvinceName = data.ProvinceName,
                  Sent = data.Sent,
                  UserName = data.UserName,
                  User_ID = data.User_ID,
                  Province_Notifier_Datas = (new List<Province_Notifier_Data>().AddRange(data2))
              };

Эта строка не работает, и я пытаюсь выяснить, как заполнить данные из таблицы2 в эту переменную Province_Notifier_Datas.

Province_Notifier_Datas = (new List<Province_Notifier_Data>().AddRange(data2))

Я могу легко добавить запись, добавив вторуюСтрока таблицы в Province_Notifier_Datas, но я не могу получить ее обратно.

Province_Notifier dbNotifier = new Province_Notifier();
// set some values for dbNotifier
dbNotifier.Province_Notifier_Datas.Add(
          new Province_Notifier_Data
          {
              BelongsToProvince_ID = userInput.Value.ProvinceId,
              EventText = GenerateNotificationDetail(notifierDetail)
          });

Это работает и корректно вставляет данные в обе таблицы.

Редактировать:

Эти сообщения об ошибках генерируются:

Невозможно преобразовать из 'Province_Notifier_Data' в 'System.Collections.Generic.IEnumerable'

Если я смотрю в Visual Studioпеременная "Province_Notifier_Datas" имеет тип System.Data.Linq.EntitySet

Наилучший перегруженный метод соответствует для System.Collections.Generic.List.AddRange (System.Collections.Generic.IEnumerable) 'содержит недопустимые аргументы

Редактировать :

var records = from data in ctx.Province_Notifiers
              where DateTime.Now >= data.SendTime && data.Sent == false        
              join data2 in ctx.Province_Notifier_Datas on data.Province_ID equals data2.BelongsToProvince_ID
              into data2list
              select new Province_Notifier
              {
                  Email = data.Email,
                  Province_ID = data.Province_ID,
                  ProvinceName = data.ProvinceName,
                  Sent = data.Sent,
                  UserName = data.UserName,
                  User_ID = data.User_ID,
                  Province_Notifier_Datas = new EntitySet<Province_Notifier_Data>().AddRange(data2List)
              };

Ошибка 3 Имя «data2List» не имеетсуществуют в текущем контексте.

1 Ответ

0 голосов
/ 06 января 2011

data2 представляет отдельный объект типа Province_Notifier_Data, а не перечисление (следовательно, исключение).Попробуйте вставить предложение into в ваш запрос:

var records = from data in ctx.Province_Notifiers
              where DateTime.Now >= data.SendTime && data.Sent == false
              join data2 in ctx.Province_Notifier_Datas
                  on data.Province_ID equals data2.BelongsToProvince_ID
              into data2List
              select new Province_Notifier
              {
                  Email = data.Email,
                  Province_ID = data.Province_ID,
                  ProvinceName = data.ProvinceName,
                  Sent = data.Sent,
                  UserName = data.UserName,
                  User_ID = data.User_ID,
                  Province_Notifier_Datas = data2List
              };

Если Province_Notifier_Datas имеет тип EntitySet<T>, вы можете попробовать следующее: Определить метод расширения (идея из здесь ):

public static class Extensions
{
    public static EntitySet<T> ToEntitySet<T>(this IEnumerable<T> source)
        where T : class
    {
        var entitySet = new EntitySet<T>();
        entitySet.AddRange(source);
        return entitySet;
    }
}

А затем заменить последнюю строку на:

Province_Notifier_Datas = data2List.ToEntitySet()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...