如何填充元组列表的元组列表由变量确定

时间:2017-06-27 07:38:26

标签: c#

我正在尝试填充元组列表,其中元素的数量由Enumerable决定。 我试图遍历元组列表中的可枚举:

    var items = UnitOfWork.GetAll<Table>().Where(x => tableIds.Contains(x.Id));

    var tupleList = new List<Tuple<string, string>> {

            foreach (var item in items)
            {
                new Tuple<string, string>(item.A1, item.A2),
                new Tuple<string, string>(item.A1, item.A2)
            {
    };

但这似乎不被允许( - &gt;在结束大括号处的红色摆动线))。 从元组列表外部循环不会公开元组列表以供进一步使用。 任何帮助,将不胜感激。此致,Manu

Tims建议我的代码现在看起来:

    public IEnumerable<EmailListModel> Get()
    {
        IIndireKatPrincipal indireKatPrincipal = identityStorage.GetPrincipal();
        var groupId = indireKatPrincipal.GroupId;
        var araIds = UnitOfWork.GetAll<UserGroup>()
                .Where(group => group.Id == groupId)
                .SelectMany(group => group.S_ARA).Select(ara => ara.Id);

        var aras = UnitOfWork.GetAll<S_ARA>().Where(x => araIds.Contains(x.Id)).AsEnumerable();

        List<Tuple<string, string>> tupleList = aras
            .Select(ara => new Tuple<string, string>(ara.IEVName, ara.IEVEmail))
            .ToList();

        var emailListModel = tupleList.Select(entity => new EmailListModel()
        {
            DisplayAddress = entity.Item1,
            EmailAddress = entity.Item2
        }).ToList();

        return emailListModel;
    }

现在它完美无缺(在var aras = ...中添加.AsEnumerable()之后)。

2 个答案:

答案 0 :(得分:3)

您无法在WebJobs V1.1.2 fails to remove poison messages from queue with V8.0.1 of Storage 中使用foreach。使用collection initializer + Select

List<Tuple<string, string>> tupleList = items
   .Select(item => new Tuple<string, string>(item.A1, item.A2))
   .ToList();
  

ToList   元素初始值设定项可以是简单值,表达式或   对象初始值设定项

允许Collection initializer:但不允许expression(例如,循环)

答案 1 :(得分:1)

如果您使用的是C#7,则可以使用新的Tuple语法执行此操作:

var tupleList = items.Select(item => (item.A1, item.A2)).ToList();

...

foreach (var item in tupleList)
{
    Console.WriteLine(item.Item1);
    Console.WriteLine(item.Item2);
}

如果需要,您可以将属性的名称从默认Item1Item2更改为其他内容:

var tupleList = items.Select(item => (A1: item.A1, A2: item.A2)).ToList();

foreach (var item in tupleList)
{
    Console.WriteLine(item.A1);
    Console.WriteLine(item.A2);
}