【发布时间】:2018-06-13 23:21:43
【问题描述】:
由于新的需求,我们必须在当前开发中添加相同的翻译,内置实体框架 4,它使用 SQL Server。因此,如果我们有一个警报,例如,我们需要通过检查翻译一些值来带来数据,例如它的标题或描述。
表:
警报
- AlertId int
- AlertTypeId int
- AlertTextEnum int
翻译
- FieldId int
- 字段名字符串
- 代码字符串
- 描述字符串
- LanguageId int
因此,如果我们想要获取 AlertType 的文本,我们必须连接两个表并与 Translation.FieldName == "AlertTypeEnum" 和 Translation.Code == Alert.AlertTypeEnum 建立关系。主要是这样。
这里我在 LinqPad 上检查了我的肮脏方法,但不适用于此版本的 Entity-Framework,因为我不能使用 ToString 方法。
var o = Translations.Where(m => m.LanguageId == 1 && new List<string> {
"AlertTypeId"
}.Contains(m.FieldName));
var list = from item in Alerts
itemTranslation in o item.AlertTypeId.ToString() equals itemTranslation.Code
into ps
from itemTranslation in ps.DefaultIfEmpty()
select new
{
AlertId = item.AlertId ,
AlertTypeDescr = itemTranslation.Description
}.ToList();
因为这不起作用,所以我尝试在第一次查询之前将代码解析为整数,但它也不起作用。
var o = Translations.Where(m => m.LanguageId == 1 && new List<string> {
"AlertTypeId"
}.Contains(m.FieldName)).
Select (x => new {
Code = (int)( x.Code),
FieldName = x.FieldName,
Description = x.Description
}).ToList();
var list = from item in Alerts
join itemTranslation in o
on item.AlertTypeId equals itemTranslation.Code
select new
{
AlertId = item.AlertId ,
AlertTypeDescr = itemTranslation.Description
};
我得到“无法将类型 'string' 转换为 'int'”。
一些建议?我无法更改实体框架和模型的版本。
【问题讨论】:
-
EF 正在将您的查询转换为 SQL,因此您只能使用在 SQL 中具有等效功能的操作。您可以使用 ef 提供的 SqlFunctions 来执行此类操作,在您的特定情况下 SqlFunctions.StringConvert 可能会有所帮助。另见stackoverflow.com/questions/5971521/…
标签: c# .net linq entity-framework-4