大家好我正在使用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 列
感谢
答案 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
});