[英]Getting table values plus count of some columns in the same linq statement
嗨,大家好,我正在使用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>();
}
在我返回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列
謝謝
因此,給出以下數據庫模型和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
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.