2017-10-10 41 views
0

我一直花費相當長的時間嘗試創建一個Linq查詢,其中包含一個組,只是爲了返回一個SelectList的列表與公共文本屬性。等價的Sql組由Linq獲取值和文本屬性

我認爲並且仍然希望它不必像它看起來那麼困難,我更喜歡認爲那是我和我有時候疲倦的大腦,但老實說我放棄了。

我已經能夠做到什麼,我想與原始SQL,但是,它只是簡單的好奇心,因爲我拒絕認爲LINQ的是,多大的浪費時間的......

所以,請,如果有人在那裏,誰知道如何在一個LINQ查詢拉姆達做到這一點,請照亮我疲倦的大腦......

什麼,我得到了與原始的SQL和LINQ的拉姆達希望(它完美的作品,我花了2分鐘,我可以很好地填充我的MultiSelectFor):

string sql = " select [AlphabeticCode] as 'Value', concat([AlphabeticCode], ' - ', Currency) as Text from [table] " + 
         " group by AlphabeticCode, Currency; "; 

      var currency = db.Database 
          .SqlQuery<Models.myViewModels.LinqToSql.SelectListViewModel>(sql) 
          .ToList(); 

      model.currency = new SelectList(currency, "Value", "Text"); 

什麼我以爲我做得對,讓我花了lonnnng時間,並最終給我收集我的文字裏財產......不是我想在所有...(我知道是不正確的,我嘗試了不少更多的選項),但是這一次有點對我有意義,請給一個理由保持這種奇怪的LINQ的東西的工作...

var cc = db.table.GroupBy(item => item.Currency) 
       .Select(group => 
        new 
        { 
         Value = group.Key, 
         Text = group.Select(m => m.Currency).Take(1), // here is where i want just ONE string that is the currency name 
        } 
       ) 
       .ToList(); 

謝謝多到誰需要一些時間來閱讀我的挫折...

+0

你真的想通過或僅獲得格式爲字符串的唯一的AlphabeticalCode + Currancy對? – mikelegg

+0

AlphabeticalCode + Currancy對格式化爲字符串,所以我以後可以做 model.currency = new SelectList(currency,「Value」,「Text」);但當然分組或按字母順序編碼 –

+1

對不起,你只是有麻煩兩列分組,看起來像一個很瑣碎的查詢,所以我可能錯過了什麼? –

回答

2

我不知道這是否是你所需要的,但我認爲這將使查詢相同的SQL

var items = from item in table 
       group item by new { item.AlphabeticCode, item.Currency } into g 
       select new { Value = g.Key.AlphabeticCode, Text = g.Key.AlphabeticCode + " - " + g.Key.Currency }; 
    //Fluent or inline 
    table. 
      GroupBy(i => new { i.AlphabeticCode, i.Currency }). 
      Select(g => new { Value = g.Key.AlphabeticCode, Text = g.Key.AlphabeticCode + " - " + g.Key.Currency }); 
+0

是的,這樣做,謝謝。你會告訴我如何用lambda語法來完成嗎? –

+0

@ j.rey爲其他方式做了編輯。 –