簡體   English   中英

在同一linq語句中獲取表值以及某些列的計數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM