c#从linq join返回名为tuple的元组

时间:2019-06-05 09:15:14

标签: c# linq nhibernate tuples nhibernate-envers

我正在尝试在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 个答案:

答案 0 :(得分:1)

我认为正确的语法应该是

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

答案 1 :(得分:1)

您可以尝试

var tuples = data.Select(x => (A: x.A, B: x.B));