获取表值以及同一linq语句中某些列的计数

时间:2017-10-31 10:54:31

标签: c# linq

大家好我正在使用Dto Class对象,如下所示

    public class TypeDTO{

       public long Type { get; set; }

       public string Name { get; set; }

       public byte DefType { get; set; }

       public byte DefCode { get; set; }

       public Dictionary<int,decimal> SumOfEachType = new Dictionary<int,decimal>();
      }

并在我的repository-class中,我返回IEnumerable<TypeDTO>我尝试构建一个linq查询,除了获取整个表并在相应的属性中分配每个记录并尝试创建一个像

          dictionary<typeColumn,Count(typecolumn)>

具体

       var Types = _db
            .table
            .Select(ds => new TypeDTO()
            {
                Type = long.Parse(ds.RIT_TYPE.ToString()),
                Name = ds.RIT_NAME,
                DefType = byte.Parse(ds.RIT_DEF_TYPE.ToString()),
                DefCode = byte.Parse(ds.RIT_DEF_CODE.ToString()),
               SumOfEachType = new Dictionary ????? 
            });

在SumOfEachType属性中,我想保存sql查询的结果,如下所示

      SELECT rit_type,count(rit_type) as sum
      FROM table group by rit_type

到目前为止可能的方法:

1)创建2个linq语句。以这种方式我不知道如何将结果组合在一个typeDTO对象中

2)使用一个linq查询,当SumofEachType的时间到目前为止我得到一些未知的值时,我包含第二个linq语句来获取计数和 rit_type

感谢

1 个答案:

答案 0 :(得分:0)

因此给出了以下数据库模型和dto:

public class DatabaseModel
{
    public int RIT_TYPE { get; set; }
    public string RIT_NAME { get; set; }
    public int RIT_DEF_TYPE { get; set; }
    public int RIT_DEF_CODE { get; set; }
}

public class TypeDTO
{
    public long Type { get; set; }

    public string Name { get; set; }

    public byte DefType { get; set; }

    public byte DefCode { get; set; }

    public Dictionary<int, int> SumOfEachType = new Dictionary<int, int>();
}

我将字典更改为Dictionary<int, int> - 如果您的意图是简单地计算,那么就不需要小数 - 除非您有其他要求,在这种情况下您可以重构以适合您需要:

然后在内存对象中使用以下内容:

var databaseModels = new List<DatabaseModel>
        {
            new DatabaseModel
            {
                RIT_TYPE = 1,
                RIT_NAME = "Test1",
                RIT_DEF_TYPE = 1,
                RIT_DEF_CODE = 1
            },
            new DatabaseModel
            {
                RIT_TYPE = 2,
                RIT_NAME = "Test2",
                RIT_DEF_TYPE = 2,
                RIT_DEF_CODE = 2
            },
            new DatabaseModel
            {
                RIT_TYPE = 3,
                RIT_NAME = "Test3",
                RIT_DEF_TYPE = 3,
                RIT_DEF_CODE = 3
            }
        };

您的查询如下所示:

        var datebaseModelDictionary = databaseModels
            .GroupBy(model => model.RIT_TYPE)
            .ToDictionary(models => models.Key, models => models.Count());

        var result = databaseModels
            .Select(model => new TypeDTO
            {
            Type = long.Parse(model.RIT_TYPE.ToString()),
            Name = model.RIT_NAME,
            DefType = byte.Parse(model.RIT_DEF_TYPE.ToString()),
            DefCode = byte.Parse(model.RIT_DEF_CODE.ToString()),
            SumOfEachType = datebaseModelDictionary
        });