【转】C# 3.0 和VS2008 bug 收集

原文:http://www.cnblogs.com/126/archive/2007/07/06/808547.html

最近看到园子里关于linq的文章多起来,心里无比开心,同伴越来越多了。因为一篇文章中,提到,有可能是dlinq的bug。原文:http://www.cnblogs.com/yuandong/archive/2007/07/06/807834.html
所以,专门开辟一块地方,收集c# 3.0 及orcas 的bug或你认为是bug的问题。包括c#语法,ide操作,等等。你所提交的任何问题,都会得到答复。注:不代表microsoft.

关于该文中提到的问题,其实,并不是bug。文中所涉及的表的关系,如图所示:

Channel 与 BlogClass,BlogClass与Blog, 及Channel与 Blog 都是1:M的关系,而blog表中的记录,是无法反应Channel 与 BlogClass的关系的。
var a = from blog in db.Blogs
                    where blog.Channel 
== db.Channels.Single<Channel>(channel => channel.Title == "生活频道")
                          
&& blog.BlogClass == db.BlogClasses.Single<BlogClass>(c => c.Title == "默契")
                    select blog;
即“生活频道”并不一定包含“默契”。也就是说,在blog表中,channelId和blogclassId并不一定对应。欢迎大家回帖讨论,提出不同的观点。
关于本例,最新的版本所生成的脚本。

exec sp_executesql N'SELECT COUNT(*) AS [value]
FROM [dbo].[Blog] AS [t0]
WHERE (EXISTS(
    SELECT NULL AS [EMPTY]
    FROM [dbo].[Channel] AS [t1]
    WHERE ([t0].[ChannelID] = [t1].[ChannelID]) AND ([t1].[Title] = @p0)
    )) AND (EXISTS(
    SELECT NULL AS [EMPTY]
    FROM [dbo].[BlogClass] AS [t2]
    WHERE ([t0].[BlogClassID] = [t2].[BlogClassID]) AND ([t2].[Title] = @p1)
    ))
', N'@p0 nvarchar(4),@p1 nvarchar(2)'@p0 = N'生活频道'@p1 = N'默契'



第二:关于dlinq支持其他数据库的问题。
目前,dlinq完全支持sql2000,sql2005,SQL Express, SQL Compact Edition, 它会自动判断所连接数据库的版本。选取相应provioder。如果,要强行给dlinq指定provider,只要在datacontext继承类上,加一个attribute就可。如下。这为其他类型数据库提供了接口。生成T-sql脚本,是provider干的事情。

    [Provider(typeof(System.Data.Linq.SqlClient.Sql2000Provider))]
    public partial class Northwind : System.Data.Linq.DataContext
    {
第三:看见有人开始讨论linq分页了。强人好多呀。但是,友好的提醒下,暂时不要针对sql2000数据库使用linq分页,想玩就在sql2005下玩。sql2000还没有那么强大的功能,有诸多的限制。

要加快blog更新的频率了,人越来越多了呀。呵呵。哦,提供Linq To Sql 101 Sample 的下载,记着有人问要过。

posted on 2010-08-24 09:43  shaya  阅读(175)  评论(0编辑  收藏  举报

导航