星期三, 8月 25, 2010

用Linq to SQL亂數取一筆

之前有一篇文章用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: 經過一些測試,好像是.net framework 4.0才有效過ㄟ,^^||..喵滴..

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

星期三, 8月 11, 2010

Image 轉 Byte[] 的 GDI Error

今天在把 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 再轉出來,雖然自己有覺得在逃避問題,不過,山不轉路轉阿,先轉過去,之後有時間來慢慢研究吧..暈..

星期二, 8月 03, 2010

中計了..FILCO 黑軸 80%

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

先看一下他的外殼..

DPP_00001

開箱了開箱了..

DPP_00002

看一下可愛的mark..

DPP_00003

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

DPP_00004

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

DPP_00005

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

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

星期日, 8月 01, 2010

未來

女人用最珍貴的青春

來等待沒有確定的未來

是真愛還是太傻

手動加入 Entity Framework 的關聯

今天來紀錄在使用 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