Sign In
こだかたろうです
マイクロソフトでデベロッパーエバンジェリストをやっています。 未だ修行中の身であります。
Translate This Page
Translate this page
Powered by
Microsoft® Translator
Options
Blog Home
About
Email Blog Author
Share this
RSS for posts
Atom
RSS for comments
Search
Advanced search options...
Search In:
Everything
Blogs
Forums
People
Groups
Places
Pages
Date range:
All Time
Last Year
Last 6 Months
Last 3 Months
Last Month
Last Week
Last Two Days
Tags
ADO.NET
ADO.NET Data Service
AJAX
Astoria
Code
ConvertBrn
CubeConfigTool
Entity Framework
LINQ
Microsoft On
Office
OpenXML
REST
Silverlight
SQL Data Services
SQLServer
TechEd
Visual Studio
VSTO
Windows7
WindowsMobile
オフラインセミナー
お知らせ
データアクセス
日記
Archive
Archives
April 2010
(12)
March 2010
(12)
February 2010
(3)
January 2010
(3)
December 2009
(4)
November 2009
(4)
October 2009
(3)
September 2009
(5)
August 2009
(5)
July 2009
(9)
June 2009
(4)
May 2009
(7)
April 2009
(6)
March 2009
(18)
February 2009
(6)
January 2009
(6)
December 2008
(5)
November 2008
(4)
October 2008
(6)
September 2008
(6)
August 2008
(6)
July 2008
(6)
June 2008
(6)
May 2008
(7)
April 2008
(6)
March 2008
(9)
February 2008
(4)
January 2008
(4)
December 2007
(6)
November 2007
(4)
October 2007
(5)
September 2007
(6)
August 2007
(5)
July 2007
(4)
June 2007
(5)
May 2007
(9)
April 2007
(8)
March 2007
(2)
LINQ to SQL内での関数の使用
MSDN Blogs
>
こだかたろうです
>
LINQ to SQL内での関数の使用
LINQ to SQL内での関数の使用
Taro Kodaka
3 Dec 2007 6:47 AM
Comments
1
こんにちは、こだかです。
今回は、LINQ to SQL構文内部での関数の使用について書いておきます。
例として以下をご覧ください。
static void Main(string[] args)
{
using (pubsDataContext pubs = new pubsDataContext())
{
pubs.Log = Console.Out;
var titles = from t in pubs.titles
where t.type == Test("business")
select t;
foreach (var title in titles) Console.WriteLine(title.title_id);
}
}
static string Test(string arg1)
{
return arg1;
}
この例は問題なく動作します。
しかし、以下のようにすると、初めてのforeachのタイミングでエラーになります。
static void Main(string[] args)
{
using (pubsDataContext pubs = new pubsDataContext())
{
pubs.Log = Console.Out;
var titles = from t in pubs.titles
where Test(t.type) == "business"
select t;
foreach (var title in titles) Console.WriteLine(title.title_id);
}
}
static string Test(string arg1)
{
return arg1;
}
これは、LINQ to SQLの遅延実行により、初めてforeachに差し掛かったタイミングで、サポートされない関数が指定されたからです。
このように、LINQ to SQLの構文自体に独自関数を適用することは出来ないと言うことになります。
では、もう少し複雑な条件で抽出したい場合はというと、要はもともと持っているメンバーでと言う話ですね。
いくつか例を書いておきます。
含まれた文字での比較
static void Main(string[] args)
{
using (pubsDataContext pubs = new pubsDataContext())
{
pubs.Log = Console.Out;
var titles = from t in pubs.titles
where t.type.Contains("b")
select t;
foreach (var title in titles) Console.WriteLine(title.title_id);
}
}
日付に対して年での比較
static void Main(string[] args)
{
using (pubsDataContext pubs = new pubsDataContext())
{
pubs.Log = Console.Out;
var titles = from t in pubs.titles
where t.pubdate.Year < 1999
select t;
foreach (var title in titles) Console.WriteLine(title.title_id + " " + title.pubdate);
}
}
文字列部分比較
static void Main(string[] args)
{
using (pubsDataContext pubs = new pubsDataContext())
{
pubs.Log = Console.Out;
var titles = from t in pubs.titles
where t.type.Substring(2,2) == "si"
select t;
foreach (var title in titles) Console.WriteLine(title.title_id);
}
}
実行してみるとわかりますが、実際にSQL Serverに発行されたSQL文で使用されたTransactSQLの関数は、
上から、LIKE、DATEPART、SUBSTRINGです。(賢いですね)
ちなみに、LINQ to Objectはこの限りではありませんので、ご注意下さい。
こだかたろう
1 Comments
LINQ
,
データアクセス
Blog - Comment List MSDN TechNet
Comments
Loading...
Leave a Comment
Name
Comment
Please add 7 and 2 and type the answer here:
Post