分类目录

链接

2012 年 1 月
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

近期文章

热门标签

新人福利,免费薅羊毛

现在位置:    首页 > .NET > 正文
Linq to Entity 连接(join) Linq to Object
.NET 评论(1) 阅读(4,523)

数据库的数据代码Linq to Entity在join前,内存中数据代码Linq to Object在join后。代码如下:

  1. var entityNames = (from en in entitySet  
  2.                    join ob in objectList  
  3.                    on en.SID equals ob.Identity  
  4.                    select en.Name).ToList();  

好了,编译通过,运行时抛异常了。

Only Primitive types ('Such as Int32, string, and Guid') are supported in this context

中文意思是“无法创建类型为“项目名.MyObject”的常量值。此上下文仅支持基元类型(“例如 Int32、String 和 Guid”)"

看来在涉及这种操作时,我们内存中的数据还不能是非基元类型。List<MyObject> objectList = new List<MyObject>();

MyObject要为int32, string或者Guid,才能运行通过,并且不是整表查询,而是针对name列的单独查询。大家可以一试。

所以在这里给出大家一点建议:

在涉及到内存中的对象与EF里的对象混合查询时,如果内存中的对象不为基元类型,则先把其中的某个要参加匹配的变量查询出来,再拿着它与EF对象混合查询。

这样不仅不会出错,效率也高,且代码会两段写,也容易看清楚意思。

以上的代码这样,才是最佳的

  1. IEnumerable<long> idList = objectList.Select(o => o.Identity);  
  2.   
  3. var entityNames = (from en in entitySet  
  4.                    join id in idList  
  5.                    on en.SID equals id  
  6.                    select en.Name).ToList();  

数据库查询语句如下:

  1. SELECT   
  2. [Extent1].[NameAS [Name]  
  3. FROM  [dbo].[Entity] AS [Extent1]  
  4. INNER JOIN  (SELECT   
  5.     [UnionAll1].[C1] AS [C1]  
  6.     FROM  (SELECT   
  7.         cast(1 as bigintAS [C1]  
  8.         FROM  ( SELECT 1 AS X ) AS [SingleRowTable1]  
  9.     UNION ALL  
  10.         SELECT   
  11.         cast(2 as bigintAS [C1]  
  12.         FROM  ( SELECT 1 AS X ) AS [SingleRowTable2]) AS [UnionAll1]  
  13. UNION ALL  
  14.     SELECT   
  15.     cast(3 as bigintAS [C1]  
  16.     FROM  ( SELECT 1 AS X ) AS [SingleRowTable3]) AS [UnionAll2] ON  CAST( [Extent1].[SID] AS bigint) = [UnionAll2].[C1]  


虽然里面的操作是麻烦了点,但是最后查询出来的东西却只有Name一个。相对而言,还是比较好的。

============ 欢迎各位老板打赏~ ===========

本文版权归Bruce's Blog所有,转载引用请完整注明以下信息:
本文作者:Bruce
本文地址:Linq to Entity 连接(join) Linq to Object | Bruce's Blog

Linq to Entity 连接(join) Linq to Object:目前有1 条留言

  1. 207.46.55.27 : 2013年02月05日下午 6:09 回复

    😆

发表评论

留言无头像?