顯示具有 Linq 標籤的文章。 顯示所有文章
顯示具有 Linq 標籤的文章。 顯示所有文章

Group By 使用方法

2015年1月8日 星期四

最近遇到一個操作集合物件時,需要做群組的功能,以前都是在SQL裡操作

今天透過Linq的Group By方法來實作,順便記錄一下。


測試資料結構



Group By後結果



//放入測試資料
var testList = new List();
testList.Add("event1,s11,1");
testList.Add("event1,s12,1");
testList.Add("event1,s13,1");
testList.Add("event1,s14,1");
testList.Add("event1,s15,1");
testList.Add("event2,s21,1");
testList.Add("event2,s22,1");

//處理資料格式
var sourceList = new List>();
foreach (var item in testList)
{
    var querySplit = item.Split(',');
    string eventId = querySplit[0];
    string selectionId = querySplit[1];
    string handicap = querySplit[2];

    var list = new KeyValuePair(eventId, string.Format("{0}#{1}", selectionId, handicap));
    sourceList.Add(list);
}

//利用Group By 放入Dictionary物件裡
Dictionary> mList = sourceList.GroupBy(p => p.Key,p=>p.Value)
    .ToDictionary(p => p.Key, p => p.Select(s => s)
    .ToList());

最後呈現結果如下:

轉換完成後Dictionary的Key就是event,Value就是該Event下的記錄 。

參考來源:http://www.dotblogs.com.tw/lastsecret/archive/2011/02/18/21422.aspx

Read more...

foreach裡有條件之改寫

2014年10月1日 星期三

利用lambda改寫可讓原來的程式更為精簡,請看以下的範例 原來寫法

var result = CacheService.Current.GetAllMarketType();
var entities = new List();
if (result != null)
{
 // Make up model data from service return.
 foreach (MarketType marketType in result)
 {
  if (marketType.Status != MarketTypeStatus.DELETED)
  {
   entities.Add(
    new MarketTypeEntity(marketType)
    {
     Id = marketType.id,
     From = marketType.From,
     To = marketType.To,
     Interval = marketType.Interval,
     MaximumRange = marketType.maximumRange,
     MinimumRange = marketType.minimumRange,
     Status = marketType.Status
    });
  }
 }
}

用lambda可改為

var result = CacheService.Current.GetAllMarketType();
var entities = new List();
if (result != null)
{
  entities.AddRange(
  result.Where(o => o.Status != MarketTypeStatus.DELETED)
  .Select(marketType => new MarketTypeEntity(marketType)
  {
   Id = marketType.MarketTypeId,
   From = marketType.From,
   To = marketType.To,
   Interval = marketType.Interval,
   MaximumRange = marketType.maximumRange,
   MinimumRange = marketType.minimumRange,
   Status = marketType.Status
  })
 );
}

Read more...

Linq偵錯方式

2014年2月14日 星期五

linq 裡也可以寫funciton來表示

原寫法,當資料有問題則直接出錯

 

List<Order> order = GetAllOrderList();

order = order.Where(o=>o.status.Equals(1) && o.paymentStatus.Equals(1));


如果要查哪筆資料出錯可以用以下寫法



List<Order> orderList = GetAllOrderList();

orderList = orderList.Where(o=>
{
var hasHit =false;
try
{
hasHit = o.status == "NCCC" && o.paymentStatus ==1;
}
catch(Exception ex)
{
var error = o.id;
var err = ex.Message;
}
}).ToList();


等於方式用”Equals”時要很小心,物件一定要有值才不會出錯



所以我改成用==方式來處理就沒這麼問題了



利用function寫法可以讓錯誤更容易偵錯喔。

Read more...