如何将List <testentity>添加到List <t>?

时间:2018-03-14 11:59:24

标签: c# generics

我有一个方法MapResults,它返回IEnumerable<T>,我有一个列表temp。我想添加returnValtemp列表并返回IEnumerable<T>

public class RetrieverClass<T, TEntity> : IRetriever<T, TEntity> 
    where T : BaseFileEntity 
    where TEntity : class, IEntity<int>
{
    public async Task<IEnumerable<T>> TestMethod(IEnumerable<Item> items)
    {
        var returnVal =  MapResults(result).ToList();

        List<TestEntity> temp = new List<TestEntity>();

        foreach (var testNo in testNos)
        {
            TestEntity test = CreateTestEntity(testNo);
            temp.Add(test);
        }

        returnVal.AddRange(temp);
    }

    private IEnumerable<T> MapResults(IEnumerable<TEntity> results)
    {
        return results.Select(x => _repository.ObjectMapper.Map<T>(x));
    }
}

public class TestEntity : BaseFileEntity
{
}

但它在returnVal.AddRange(temp)行上给出错误。

  

无法从System.Collections.Generic.List<TestEntity>转换为   System.Collections.Generic.IEnumerable<T>

1 个答案:

答案 0 :(得分:0)

根据@Camilo Terevinto和@mwwills return (IEnumerable<T>)retVal;的建议给了我一个暗示继续解决我的问题。我发布我的答案,以便它可以帮助其他人。感谢大家的帮助,您的意见确实有所帮助。

public async Task<IEnumerable<T>> TestMethod(IEnumerable<MasterDataFileOperationItem> items)
{

    var ids = items.Select(i => i.Id).ToArray().Select(x => x.ToString()).ToArray();

    var result = await _repository.GetAll().Where(x => ids.Contains(x.Id)).ToListAsync();

    var returnVal = MapResults(result).ToList();

    var temp = CreateTestEntity(testNos);

    returnVal.AddRange(temp);

    return returnVal;
}

public IEnumerable<T> CreateTestEntity(string[] testNos)
{
    List<TestEntity> ls = new List<TestEntity>();
    foreach (var testNo in testNos)
    {
        var TestEntity = new TestEntity
        {
            TestNo = testNo,
        };

        ls.Add(TestEntity);
    }

    return (IEnumerable<T>) ls;
}