Подтвердить что ты не робот

Отобразите его в таблицу "Таблица 1"

Вот упомянутые выше методы:

public IList<tst> testUsers()
{
    IList<tst> testUsers = _test.GetAll().ToList();
    return test(test);
}
4b9b3361

Ответ 1

Чтобы отображать пользователей с местоположением, мне кажется, вам нужен один класс, называемый AdsnapshotUsers

public class AdsnapshotUsers
{
// three fields UserId, UserLogonName, Location

}

Теперь создайте один метод, который возвращает IList<AdsnapshotUsers>

 public IList<AdsnapshotUsers> GetAdsnapshotUsers()
{
List<User> Users =  GetAcitveUsers().ToList();
List<ADSnapshot> adSnapshotUsers = _adSnapshotRepository.GetAll().ToList();

     return (from u in Users  
         join ad in adSnapshotUsers on u.UserLogonName equals ad.UserLogonName 
         select new AdsnapshotUsers { 
             UserId= u.UserId, UserLogonName = u.UserLogonName, Location = ad.Location
         }
     ).ToList<AdsnapshotUsers>();
}

Left Outer Join, чтобы отображать все значения из таблицы пользователя, но если в таблице объявлений нет значения userlogonname (значение местоположения пустое)

 (from u in Users 
  join ad in adSnapshotUsers on u.UserLogonName equals ad.UserLogonName into aduserselect
  from ad1 in aduserselect.DefaultIfEmpty() 
  select new AdsnapshotUsers { 
      UserId= u.UserId, UserLogonName = u.UserLogonName, Location = ad1.Location
  }
 ).ToList<AdsnapshotUsers>();

Здесь все записи из таблицы пользователя будут выбраны и для местоположения, если существует имя пользователя, тогда значение имени местоположения, установленное с табличным значением ADSnapshot, иначе не существует, а затем задано пустое значение по умолчанию.

Ответ 2

Самый простой способ объединения двух IEnumerables в LINQ - с Join():

   var joined = from u in GetActiveUsers()
                join ad in _adSnapshotRepository.GetAll()
                    on u.UserLogonName equals ad.UserLogonName
                select new { User = u, Location = ad.Location }

Конечно, присоединенный теперь IEnumerable анонимного типа. Если вы отображаете эту информацию в виде сетки или что-то, что требует плоского объекта, вы можете создать свой собственный класс со свойствами, которые вы хотите получить из каждой таблицы, и выбрать это вместо.

Две другие вещи, которые следует отметить:

(1) вы всегда вызываете ToList() раньше, чтобы конвертировать из IQueryable в IEnumerable. Отложив ToList(), пока вы не выполнили все ваши присоединения и фильтрации, вы можете получить большую часть своего запроса в SQL (а не в памяти).

(2) вместо того, чтобы присоединяться, часто предпочтительнее настраивать свойства ассоциации на своих объектах и ​​использовать их:

 IQueryable<User> users = ...
 var combinedInfo = users.Select(u => new { User = u, Location = u.ADSnapshot.Location })
    .ToList();

Ответ 3

Если у вас есть отношения (1:1) между этими двумя таблицами, вы можете легко получить записи, используя только один запрос. и даже записи нет во второй таблице.

Я использую определение определенного класса для хранения данных.

_userRepository.GetAll().Select(u=>new AdsnapshotUsers  {
         UserId= u.UserId, 
         UserLogonName = u.UserLogonName, 
         Location = u.ADSnapshot.Location
 }).ToList();