用Linq to SQL亂數取一筆

星期三, 八月 25, 2010 | 標籤: | 0 意見 |

之前有一篇文章用Linq to SQL亂數取一筆,今天在寫這個需求的時候,看到有更簡單的寫法,直接看 code 吧!

void Main()
{
var data = Products.OrderBy(a=>Guid.NewGuid()).Take(1);
foreach(var item in data)
{
Console.WriteLine(string.Concat(item.ProductID,"--", item.ProductName));
}
}

這樣就可以很簡單做出亂數取出一筆資料了,我們來看一下生出來的 SQL Statement

SELECT TOP (1)
[Project1].[ProductID] AS [ProductID],
[Project1].[ProductName] AS [ProductName],
[Project1].[SupplierID] AS [SupplierID],
[Project1].[QuantityPerUnit] AS [QuantityPerUnit],
[Project1].[UnitPrice] AS [UnitPrice],
[Project1].[UnitsInStock] AS [UnitsInStock],
[Project1].[UnitsOnOrder] AS [UnitsOnOrder],
[Project1].[ReorderLevel] AS [ReorderLevel],
[Project1].[Discontinued] AS [Discontinued],
[Project1].[CategoryID] AS [CategoryID]
FROM ( SELECT
NEWID() AS [C1],
[Extent1].[ProductID] AS [ProductID],
[Extent1].[ProductName] AS [ProductName],
[Extent1].[SupplierID] AS [SupplierID],
[Extent1].[CategoryID] AS [CategoryID],
[Extent1].[QuantityPerUnit] AS [QuantityPerUnit],
[Extent1].[UnitPrice] AS [UnitPrice],
[Extent1].[UnitsInStock] AS [UnitsInStock],
[Extent1].[UnitsOnOrder] AS [UnitsOnOrder],
[Extent1].[ReorderLevel] AS [ReorderLevel],
[Extent1].[Discontinued] AS [Discontinued]
FROM [dbo].[Products] AS [Extent1]
) AS [Project1]
ORDER BY [Project1].[C1] ASC

Linq to SQL 幫我們用 NEWID 生出子查詢,然後再用排序的方式來抓出來,讚吧,簡單多了..^^..

PS: Linq to Entity 也可以用喔..

參考:
http://msdn.microsoft.com/zh-tw/library/bb386976.aspx

加入書籤:

Image 轉 Byte[] 的 GDI Error

星期三, 八月 11, 2010 | 標籤: | 2 意見 |

今天在把 Image 轉成 Byte[] 的時候,一直遇到下列這個錯誤..

errorPage

關於這個錯誤,網路上沒有啥資料可以使用,自己 try 了半天,終於成功用出來了..XD
在這裡紀錄一下,讓以後遇到相同問題的人可以不用像我一樣這樣亂七八糟的亂試,看下面的 code 吧!!

/// <summary>
/// Image轉Byte[]
/// </summary>
/// <param name="image"></param>
/// <returns></returns>
private static byte[] GetImageByte(Image image)
{
Image newImage = image.GetThumbnailImage(image.Width, image.Height,
new System.Drawing.Image.GetThumbnailImageAbort(callBack), IntPtr.Zero);

ImageConverter converter = new ImageConverter();
return (byte[])converter.ConvertTo(newImage, typeof(byte[]));
}
private static bool callBack()
{
return true;
}

這 method 的寫法,就是利用原本的 Image 生出一個跟自己一樣的 Image,得到新的 Image 再轉出來,雖然自己有覺得在逃避問題,不過,山不轉路轉阿,先轉過去,之後有時間來慢慢研究吧..暈..

加入書籤:

中計了..FILCO 黑軸 80%

星期二, 八月 03, 2010 | 標籤: | 1 意見 |

噹噹噹,中計了中計了,話說之前在回家的路上,收到一個自稱好心人士的禮物,心想天下哪有這麼好康的事情,可以讓我無限使用無限享受這份大禮,事情發生不到兩個月,內心驚覺這是個陰謀這是個陰謀,電視上常常看到有些新聞,就是使用一些手段讓人不知不覺的上癮,之後就離不開了,現在的我,情況就像這樣,使用了好的鍵盤後再用其他鍵盤就感覺很暗暗暗,今日心癢難忍,所以下班就去光華"金鍵盤"敗家啦..><||..

先看一下他的外殼..

DPP_00001

開箱了開箱了..

DPP_00002

看一下可愛的mark..

DPP_00003

正面來一張..無痕的無痕的..

DPP_00004

側面來一張...優滴優滴..

DPP_00005

阿們,這次敗家的花了3200大洋,也算是對自己手指的一個犒賞,畢竟鍵盤是我的吃飯傢伙,買好一點等於對自己的手指好一點,該花則花,該用則用,"人參"就是這樣阿..拉拉拉拉拉...

參考:
http://gdgt.com/diatec/filco/majestouch-tenkeyless/fkbn87ml-eb/

加入書籤:

未來

星期日, 八月 01, 2010 | 標籤: | 2 意見 |

女人用最珍貴的青春

來等待沒有確定的未來

是真愛還是太傻

加入書籤:

手動加入 Entity Framework 的關聯

| 標籤: | 0 意見 |

今天來紀錄在使用 Entity Framework 的一個技巧,我們常常在使用 .edmx 的時候需要自己去拉關聯,因為有時候資料庫的 table 跟 table 不一定會在一開始設計的時候加上關聯,或是有些時候資料庫部份我們並沒有權限去修改,這時候我們就可以自己去 .edmx 上面拉關聯,這樣我們在寫 linq to entity 就可以不用用 join in 的方式而是直接用關聯的方式寫就行了,下面我建立一個簡單的兩個 table 來做的簡單的範例

這是簡單的兩個 Table,因為資料庫裡面沒有設關聯,所以在 edmx 裡是沒有關聯的

image

我們手動加入關聯

SNAGHTMLecfebd

之後我們還要在"關聯"設定"Mapping Details"下面這個才算完成

image

編譯一下,竟然發現出現錯誤..

image

我們還要去把 Child 的 ParentId 去掉才會正確編譯的過..

image

這樣就 ok 啦,住意這個修改只有在 .edmx 裡有作用,在資料庫那邊完全不會有任何改變,所以大可放心去修改吧!

參考:
http://msdn.microsoft.com/en-us/library/aa697427%28VS.80%29.aspx

加入書籤:

用 LinqPad 來使用 Entity Framework

星期五, 七月 23, 2010 | 標籤: | 0 意見 |

最近再研究 Entity Framework,也試著用 Entity Frmaework 來寫專案,發覺真的需要一個工具可以幫我快速開發,以及驗證產出來的SQL Statement到底好不好,朋友就推薦我用 LinqPad,上官方網站也說可以支援 Enitity Framework,所以就直接下載來試用了,不過在 LinqPad 使用 Entity Frmaework,官方網站文字上並沒有說得很詳細,這裡簡單的介紹如何使用 LinqPad 來使用 Entity Framework

首先先新增一個 Class 專案

image

新增完,就可以在專案裡面新增要新增的 edmx 類型的檔案

image

新增 ADO.NET Entitiy Data Model

image

內容選擇從資料庫取出來

image

這裡就是最熟悉不過的設定了

image

繼續設定下去吧

image

這裡我是把所有的 Table 加進去

image

產完了,我們現在來編譯一下,因為編譯才會生出 dll 檔案

image

編譯完成後,就可以開啟 LinqPad 來設定啦,首先按 Add connection

image

在 Path to Custom Assembly 選擇我們剛剛編譯出來的 dll 檔案

image

然後跟著按下確定

image

接的設定都會幫你設定好啦,你可以按一下 Test 來確定有沒有連線錯誤

SNAGHTML27d3a3

之後就可以成功的使用 Entity Framework 啦

image

很簡單吧,讚..

而且這樣用 dll 方式產生出來的連接,如果我們在資料庫專案上對 edmx 加了哪些關聯,或是多了哪些欄位,我們就可以在 LinqPad 上面馬上使用,這樣也很貼近專案的開發方式,因為有時真的蠻需要在 edmx 上面動手腳的,所以這裡真的推薦有在用 Enitity Framework 開發的使用者,可以去載來用用

PS:用Linq to SQL 也可以用這一招來建立連線

參考:
http://msdn.microsoft.com/en-us/library/aa697427%28VS.80%29.aspx
http://www.linqpad.net/

加入書籤:

(加強版) jquery 簡單新增移除 table rows

星期日, 七月 18, 2010 | 標籤: | 0 意見 |

之前有寫一個簡單的範例 jquery 簡單新增移除table rows ,因為有人留言說如果可以指定行數來刪除 row 那就更有實用性了,所以我就寫了一個改良版的,這個範例結合了後端用 ajax 抓取 server 端的時間,還有用 jquery 1.3 以後才有的 .live() 的函式來處理,程式更短更簡單,直接看code吧!

View

<style type="text/css">
table
{
border: solid 1px red;
border-collapse: collapse;
}
table td
{
border: solid 1px red;
width: 150px;
}
</style>

<table width="450px" cellpadding="0" cellspacing="0">
<thead>
<tr>
<td>新增時間</td>
<td>內容</td>
<td>##</td>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td>r</td>
<td><a href="javascript:;">刪除row</a></td>
</tr>
</tbody>
<tfoot>
<tr>
<td></td>
<td></td>
<td>
<%= Ajax.ActionLink("新增一筆", "GetNow",
new AjaxOptions() {
OnSuccess="CreateRow",
HttpMethod="POST",
}) %>
</td>
</tr>
</tfoot>
</table>
<script type="text/javascript">
function CreateRow(data)
{
var time = data.get_data();
var newRow = $('tbody tr:first').clone();
newRow.find('td:first').append(time);
$('tbody').append(newRow);
}
function DeleteRow(elem)
{
var row = $(elem).parents('tr');
var index = $('tr').index(row);
if (index != 1)
row.hide();
}
$(document).ready(function ()
{
$('tbody a').live('click', function ()
{
DeleteRow(this);
});
});
</script>

controller

public class TableController : Controller
{
//
// GET: /Table/

public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult GetNow()
{
return Content(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
}
}

有圖有真相

image

這樣就實用性就很高啦..讚..
參考:
http://msdn.microsoft.com/en-us/library/dd394709.aspx
http://api.jquery.com/live/

加入書籤: