我当前正在使用实体框架,并且我想对两列进行联接来执行Linq查询,其中一列的类型为'String',另一列的类型为'Int32'。

类似的东西

from FirstEntity obj in context.FirstEntity 
                      join SecondEntity obj2 in context.SecondEntity on obj.SecondEntityId equals obj2.Id.ToString()

使用obj.SecondEntityId作为String和obj2.Id作为Int32

不幸的是,EF不支持ToString操作。 我陷入了这个错误(或一些类似的错误,如果我想将字符串转换为Int32):

LINQ to Entities无法识别方法'System.String ToString()'方法

直到现在,我仍然找不到解决方法。

感谢任何帮助。

#1楼 票数:2

我们通常将这样的查询分为2个查询(在linq中缺少ToString()对实体的支持使我想伤害小孩)。

var query1 = (from SecondEntity obj2 in context.SecondEntity
             select obj2.ID).ToList();

// now we're using linq to objects which does support ToString()
query1 = query1.Select(x => x.ToString());

// mixing linq to entities and linq to objects
var query2 = from FirstEntity obj in context.FirstEneity
             join SecondEntity obj2 in query1 on obj.SecondEntityId equals obj2.ID

我是在没有VS的情况下执行此操作的,因此某些语法可能是错误的,这不是一个特别好的解决方案,但EF V1。

#2楼 票数:0

在LINQ to SQL中,您可以使用Convert.ToString(obj2.Id) ,但是似乎EF不支持它(请参见MSDN上的该线程 )。 但是,您可能可以使用Model Defined Function

更新:由于似乎EF解决方案似乎不起作用,所以我将创建一个SQL视图,其中将您的int字段转换为所需的其他字段。 或者,您可以保留您现有的实体,而仅通过intstring ID跨两列视图进行联接。 查询优化器应该能够弄清楚您在做什么以使性能影响可以忽略不计。

#3楼 票数:0

最后,我在DB端基于该表创建了一个视图,其中包含一个新的int字段,其中包含转换后的字符串。 然后,我将EF实体映射到视图。 有用 :)

遗憾的是,我在EF方面找不到合适的解决方案。 希望4.0版本可以解决此类问题。

无论如何,谢谢您的帮助。

#4楼 票数:0

如果您使用功能性C#语法而不是特殊的Linq语法,是否有帮助?

var results = FirstEntity.Join(SecondEntity, 
     obj => obj.SecondEntityId, obj2 => obj2.Id.ToString(), 
    (obj, obj2) => new { First = obj, Second = obj2 });

  ask by translate from so

未解决问题?本站智能推荐:

1回复

EF中的Tricky左外部联接用于联接表上的条件

我正在尝试获取每个实体的客户记录列表以及最新的ClientNote记录。 如果客户端没有关联的注释,则我希望该客户端的ClientNote为null(类似于TSQL中的LEFT JOIN)。 我有2个相关的表格,如下所示: 当Client.Name之类的'%ike%'AND(不存在Cl
1回复

如何以最聪明的方式执行此查询?

基本上,我得到了以下表格: UserProfile-包括UserId和名为Referer Lead的UserProfile-包括名为Owner的UserProfile(FK) 我想要做的是获取特定用户个人资料的所有引荐的所有线索。 我在考虑以下过程:获取用户配置文件的所有引荐对于每个引荐
1回复

实体框架6SqlFunctionsDateDiff未在nuget包中实现

我刚刚将实体框架6(EntityFramework.dll版本6.0.0.0运行时版本v4.0.30319和EntityFramework.SqlServer版本6.0.0.0运行时版本v4.0.30319)的nuget包下载到我的4.5 Framework解决方案(它在多个项目中) 在其中
2回复

实体框架Linq,左联接和SUM和Count分组

在将SQL转换为Linq时,我需要一些帮助。 在MySQL中非常简单... 我已经看到了一些有关如何在Linq中实现左联接的示例,但是我不确定如何在其中包括SUM和Count。 我在Linq中看到过一些示例,其中从组键中选择了返回的字段。 这是否意味着,如果我在customers表中有
2回复

Linq与实体框架的渴望加载

一个客户有许多保留请求,一个保留请求只有一个顾客。 假设我像这样检索我的ReservationRequest 我得到的ReservationRequest没有问题,但是当我做这样的事情时。 我得到一个 我对EF的经验很少,但是这种事情在nHibernate中可以正常使用,我是否在
1回复

儿童1-*儿童*-*Linq实体框架的数量

我对LINQ和EF有点陌生,并试图在下面的数据库中获取每位老师所教的每个班级的学生总数。 我要输出老师姓名,然后是班级名称,然后是该班级的学生人数。 由于没有代表,我无法嵌入图片,抱歉。 我不确定如何执行此操作,因为当我尝试使用两个from语句时,我得到类型推断失败。 当我尝试使用联接
4回复

从LINQ查询返回集合的类型

我有一个方法,返回一组帐户 然后,我想将此传递给另一个函数来计算集合中所有帐户的总计。 最好的做法是返回一个Ienumerable,一个通用列表,我只是不确定什么最适合LINQ和实体框架。
1回复

实体框架/LINQ-比较日期/比较日期

我有一个非常简单的情况,但在网上的任何地方都找不到答案。 我希望实现一个简单的搜索表单 ,该表单允许用户查询在用户选择的“ 起始日期”和“终止日期”之间具有时间戳的数据库记录 。 用户还可以通过名为“样本编号”的文本字段的子字符串来过滤结果 。 如果我仅执行子字符串搜索,并从where