sélectionnez délégué anonyme avec linq

Je sais qu'il y a une manière de le faire, mais j'ai été frapper ma tête contre un mur en essayant de le comprendre. Cela fonctionne bien:

private GenericRecord CreateGeneric(GenericRecord g, Member m)
{
    g.Member = m;
    return g;
}

public IList<GenericRecord> ReportFromDatabase(DateTime startDate, DateTime endDate)
{
    List<GenericRecord> returnRecords = new List<GenericRecord>();

    returnRecords.AddRange(from r in pjRepository.Records
                           join m in memberRepository.Members on r.SID equals m.MemberId.ToString()
                           where r.TransactionDate >= startDate && r.TransactionDate <= endDate
                           select CreateGeneric((GenericRecord)r, m));

    return returnRecords;
}

Mais je sais qu'il y a un moyen de le faire sans le CreateGeneric fonction. Comment puis-je sélectionner une fonction de délégué inline?

returnRecords.AddRange(from r in pjRepository.Records
                       join m in memberRepository.Members on r.SID equals m.MemberId.ToString()
                       where r.TransactionDate >= startDate && r.TransactionDate <= endDate
                       select (delegate
                       {
                           GenericRecord g = (GenericRecord)r;
                           g.Member = m;
                           return g;
                       }));

Qui me donne cette exception:

The type of the expression in the select clause is incorrect. Type inference failed in the call to 'Select'.

Edit: une Autre tentative a échoué

returnRecords.AddRange((from r in pjRepository.Records
                        join m in memberRepository.Members on r.SID equals m.MemberId.ToString()
                        where r.TransactionDate >= startDate && r.TransactionDate <= endDate
                        select new { r, m }).Select(x =>
                        {
                            GenericRecord g = (GenericRecord)x.r;
                            g.Member = x.m;
                            return g;
                        }));

Cela me donne:

Une expression lambda avec une déclaration corps ne peut pas être convertie en une arborescence d'expression.

OriginalL'auteur Nick Spiers | 2011-02-04