c#Linq查询与元组列表

时间:2016-04-26 10:05:59

标签: c# .net linq tuples

我有2个数据库表。

在表1 Calculate中,我有1行通过Id映射到table2 CalculdateData中的多行。

现在我需要使用Table2 Calculate中的所有相关详细信息加载table1 CalculdateData中的数据。

如何将详细信息转换为Tuple-List.?

所以基本上对于CalculateData我每行有4列我需要放入一个元组。这意味着如果我有4行,我需要在列表中创建4个元组。

IEnumerable<Storage> context = new MyEntities();

var Result = (from a in context.calculate
             join b in context.CalculateData on a.Id equals b.CalcId into c
             where a.SpecialID == 2023 && a.VersionId == 1
             orderby a.InternalOrderNr ascending
             select new Storage
             {
                myField1 = a.Field1;
                myField2 = a.Field2;
                myField3 = a.Field3;
                < MISSING PART AND QUESTION >
             }).ToList();

            return Result;


public class Storage
{
            public int myField1;
            public int myField2;
            public int myField3;
            public List<Tuple<int, int, string, decimal>> myField4;
}

2 个答案:

答案 0 :(得分:1)

这应该有效:

        var Result = (from a in calculate
                      join b in calculateData on a.Id equals b.CalcId into c
                      where a.SpecialID == 2023 && a.VersionId == 1
                      orderby a.InternalOrderNr ascending
                      select new Storage
                      {
                          myField1 = a.Field1,
                          myField2 = a.Field2,
                          myField3 = a.Field3,
                          myField4 = c.Select(d => new Tuple<int, int, string, decimal>
                                                   (d.Field1, d.Field2, d.Field3, d.Field4))
                                                   .ToList()
                      }).ToList();

        return Result;

检查此查询是否在单个sql请求中转换并且您不在每个元组列表创建时发出新的sql请求也是一件好事。

编辑:如果您在查询中遇到自定义类型问题(如@Toxantron指出),此选择应该有效:

    var queryResult = (from a in calculate
                              join b in calculateData on a.Id equals b.CalcId into c
                              where a.SpecialID == 2023 && a.VersionId == 1
                              orderby a.InternalOrderNr ascending
                              select new
                              {
                                  a.Field1,
                                  a.Field2,
                                  a.Field3,
                                  myField4 = c.Select(d => new {
                                               d.Field1, d.Field2, d.Field3, d.Field4})


                              }).ToList();
    result = queryResult.Select(r => new Storage
    {
        myField1 = r.Field1,
        myField2 = r.Field2,
        myField3 = r.Field3,
        myField4 = r.myField4.Select(t => new Tuple<int,int,decimal,string>
                                          (t.Field1, t.Field2, t.Field3, t.Field4))
                             .ToList()
    })

    return Result;

答案 1 :(得分:0)

你可以尝试这样的事情。这还没有测试过。

select new Storage
 {
         myField1 = a.Field1,
         myField2 = a.Field2,
         myField3 = a.Field3,
         myField4 = c.Select(d => new Tuple<int, int, string, decimal>(d.Field1, d.Field2, d.Field3, d.Field4)).ToList()
 }).ToList();

这完全基于此This tutorial