LINQ to SQL当中的灵活的查询操作是其一个很大的优点, 但是当编写较复杂的链接时有时候需要注意一些细节。
LINQ to SQL当中的灵活的查询操作是其一个很大的优点, 但是当编写较复杂的链接时有时候需要注意一些细节。
1、LINQ to SQL 提供了 DataLoadOptions用于立即加载对象,避免往返访问数据库,提高查询性能。方法包括:
LoadWith 方法,用于立即加载与主目标相关的数据。
AssociateWith 方法,用于筛选为特定关系检索到的对象。
通过使用LoadWith 方法指定应同时检索与主目标RoleDataExtends相关的RoleMember数据,这样后续的查询方法仅访问一次数据库,并可同时获取RoleDataExtends、RoleMember的所有信息。DataLoadOptions适用于有明确外键关联的表连接.
2、多字段关联, 常规的join…on…equals语句只是适用于单一字段的关联, 如果是多个字段的关联, 则应该使用匿名类的做法。上例使用的join…on…equals语句,并且它们的字段名以及类型必须要完全一致, 常犯的错误就是Nullable类型和非Nullable类型的关联(如int?和int)。例子可参看 http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2930980&SiteID=1
3、Left Join. 在Linq to SQL当中做Left Join第一要素就是要调用DefaultIfEmpty(), 但关键的地方在于Where查询, 很多时候你需要的Where过滤条件在关联表那端, 也就是说你是要关联一个带过滤条件的表, 而不是关联后再过滤! 这个时候需要使用into关键字生成新的范围变量, 然后对其进行过滤, 而且DefaultIfEmpty必须要在Where执行之后再调用
4、在查询中使用IN语句,可能大家不知道怎么用,其实很简单
var result = from s1 in context.Customers where (new string[] { "UK", "Lisboa" }).Contains(s1.City) select s1;