c # возвращает именованный кортеж из linq join - PullRequest
1 голос
/ 05 июня 2019

Я пытаюсь выполнить соединение между объектом ревизии из nhibernate envers и списком с именами пользователей.я хочу вернуть список именованных кортежей.

это мой код

public IEnumerable<(Societa company, DateTime datetime, string userName)> CompanyHistory()
{
    IAuditReader auditReader = this._session.Auditer();
    var revison = auditReader.CreateQuery().ForHistoryOf<Societa, RevisionEntity>().Results();
    IList<Persona> user = _session.QueryOver<Persona>().List();

    var query = revison.Join(user,
                        rev => rev.RevisionEntity.IdUtente,
                        us => us.Id,
                        (rev, us) => new
                        {
                            Oggetto = rev.RevisionEntity,
                            DataModifica = rev.RevisionEntity.RevisionDate.ToLocalTime(),
                            NomeUtente = us.NomePersona
                        }).ToList();
}

но сейчас я не нашел способ вернуть кортеж

  • приведение не сработало
  • ToValueTuple не доступен для моего объекта запроса

я пробую также

(ele, p) => new (OutputGA Oggetto, DateTime DataModifica, string NomeUtente)
            {
                Oggetto = ele.RevisionEntity,
                DataModifica = ele.RevisionEntity.RevisionDate.ToLocalTime(),
                NomeUtente = p.NomePersona
            }).ToList();

но я получил new cannot be used with tuple type

чем

(ele, p) => new Tuple<OutputGA, DateTime, string>
            {
                Oggetto = ele.RevisionEntity,
                DataModifica = ele.RevisionEntity.RevisionDate.ToLocalTime(),
                NomeUtente = p.NomePersona
            }).ToList();

и получил ошибку о несоответствующем параметре

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Вы можете попробовать это

var tuples = data.Select(x => (A: x.A, B: x.B));
1 голос
/ 05 июня 2019

Я думаю, правильный синтаксис должен быть

(ele, p) => 
(
    Oggetto: ele.RevisionEntity,
    DataModifica: ele.RevisionEntity.RevisionDate.ToLocalTime(),
    NomeUtente: p.NomePersona
)).ToList();
...