tag:blogger.com,1999:blog-59465307047421309702024-03-06T16:20:07.273+08:00Jax 的工作紀錄除了在整理學習上的經驗,同時也能幫助其他需要的人Jax Huhttp://www.blogger.com/profile/01953021685585893658noreply@blogger.comBlogger4125tag:blogger.com,1999:blog-5946530704742130970.post-51986343616687231882020-07-06T13:35:00.001+08:002020-07-06T13:35:51.029+08:00LINQ 方法解釋一覽轉載自: WIDEC<br />
<br />
這張圖很好的解釋了 LINQ 常用的方法會產生的結果:<br />
<img src="https://2.bp.blogspot.com/-PEirZKSilDM/XwK3gHd1ohI/AAAAAAAAOWA/SxFPckr5xdoP6-We4cXfuhY8dkpa0K2DwCPcBGAYYCw/s1600/Linq.jpg" style="max-width:100%" /><br />
<br />
Jax Huhttp://www.blogger.com/profile/01953021685585893658noreply@blogger.com0tag:blogger.com,1999:blog-5946530704742130970.post-17679267041939195262014-02-10T23:43:00.001+08:002023-02-25T21:34:43.604+08:00[C#] 對 FirstOrDefault 新的認識FirstOrDefault 會依據最後的型別去決定 Default 時回傳的值,例如下面的範例:<br />
<pre class="cs" name="code">int? a = (new List<int>{2}).Select(x => x).FirstOrDefault();
// 2
int? b = (new List<int>{}).Select(x => x).FirstOrDefault();
// 0
int? c = (new List<int>{2}).Select(x => (int?)x).FirstOrDefault();
// 2
int? d = (new List<int>{}).Select(x => (int?)x).FirstOrDefault();
// null
</pre>Jax Huhttp://www.blogger.com/profile/01953021685585893658noreply@blogger.com0tag:blogger.com,1999:blog-5946530704742130970.post-78398738467580377542014-02-10T23:38:00.003+08:002023-02-25T21:34:49.498+08:00[C#] 用 LINQ 將字串切割成整數陣列<pre class="cs" name="code">int id;
int[] idArray = "1,2,3,4,5".Split(',')
.Where(idStr => Int32.TryParse(idStr, out id))
.Select(Int32.Parse)
.ToArray();
</pre><br />
這裡用到將 Int32.Parse 這個一般 method 指向給 delegate 的技巧。 Jax Huhttp://www.blogger.com/profile/01953021685585893658noreply@blogger.com0tag:blogger.com,1999:blog-5946530704742130970.post-2069599425708385922013-05-01T21:59:00.003+08:002023-02-25T21:36:03.320+08:00[C#] 利用 LINQ 解析 XML 至 POCO<b>menu_config.xml</b><br />
<pre class="xml" name="code"><?xml version="1.0" encoding="utf-8"?>
<menu_config>
<menu title="文章管理" url="~/Article" target="" allow="">
<submenu title="列表" url="~/Article/list" allow="" />
<submenu />
<submenu title="新增" url="~/Article/add" allow="" />
</menu>
<menu />
<menu title="帳號管理" url="~/Admin" />
</menu_config>
</pre><br />
<br />
<pre class="cs" name="code">//using System.Collections.Generic;
//using System.IO;
//using System.Linq;
//using System.Xml.Linq;
//using System.Text;
public class MenuDataModel
{
/*POCO 資料欄位*/
public string Title { get; set; }
public string Url { get; set; }
public string Target { get; set; }
public string Allow { get; set; }
public string Icon { get; set; }
public List<MenuDataModel> Submenu { get; set; }
/*取得資料清單*/
public static List<MenuDataModel> GetList(string menuConfigPath)
{
/*讀取 XML 檔案*/
var xmlContent = File.ReadAllText(menuConfigPath, Encoding.UTF8);
var menuDocument = XDocument.Parse(xmlContent);
/*利用 LINQ 轉成 POCO*/
return menuDocument.Root.Elements("menu")
.Select(menu => new MenuDataModel
{
/*取得 Element 上的 Attribute*/
Title = (string) menu.Attribute("title"),
Url = (string) menu.Attribute("url"),
Target = (string) menu.Attribute("target"),
Icon = (string) menu.Attribute("icon") ?? "Item",
Allow = (string) menu.Attribute("allow"),
/*取得子層級 Element 上的 Attribute*/
Submenu = menu.Elements("submenu")
.Select(sub => new MenuDataModel
{
Title = (string) sub.Attribute("title"),
Url = (string) sub.Attribute("url"),
Target = (string) sub.Attribute("target"),
Icon = (string) sub.Attribute("icon") ?? "Item",
Allow = (string) sub.Attribute("allow"),
}).ToList(),
}).ToList();
}
}
void Main()
{
var path = @"D:\menu_config.xml";
List<MenuDataModel> list = MenuDataModel.GetList(path);
list.Dump();
}
</pre>Jax Huhttp://www.blogger.com/profile/01953021685585893658noreply@blogger.com0