使用linq间接寻址:更改查询表达式“;选择";根据用户参数
我使用一个表“TLanguage”来记录我的站点的标签结果。我在这个表中有4列:法语、英语、德语和西班牙语 在MVC应用程序中,我使用以下查询:使用linq间接寻址:更改查询表达式“;选择";根据用户参数,linq,c#-4.0,reflection,linq-to-entities,indirection,Linq,C# 4.0,Reflection,Linq To Entities,Indirection,我使用一个表“TLanguage”来记录我的站点的标签结果。我在这个表中有4列:法语、英语、德语和西班牙语 在MVC应用程序中,我使用以下查询: var req = (from TYP in context.TYP_TypeMission join ML in context.TLanguage on TYP.IDTMultiLanguage equals ML.IDTMultiLanguage where TYP.ID
var req = (from TYP in context.TYP_TypeMission
join ML in context.TLanguage on TYP.IDTMultiLanguage equals ML.IDTMultiLanguage
where TYP.IDTFiliale == idFiliale
orderby TYP.LibTypeMission
select new SelectListItem
{
Selected = TYP.IdTypeMission == idTypeMission,
Value = SqlFunctions.StringConvert((double)TYP.IdTypeMission),
Text = ML.French
}).ToList();
根据我的网站语言,我如何在我的查询中通过ML.英语或ML.德语更改ML.法语
是否可以在查询中创建间接寻址?您可以将查询的开头保存到变量中,以后只更改最后一部分:
var query = from TYP in context.TYP_TypeMission
join ML in context.TLanguage on TYP.IDTMultiLanguage equals ML.IDTMultiLanguage
where TYP.IDTFiliale == idFiliale
orderby TYP.LibTypeMission
select new { ML, TYP };
List<SelectListItem> req;
if(Site.Lang == "DE")
{
req = (from item in query
select new SelectListItem
{
Selected = item.TYP.IdTypeMission == idTypeMission,
Value = SqlFunctions.StringConvert((double)item.TYP.IdTypeMission),
Text = item.ML.German
}).ToList();
}
else if(Site.Lang == "FR")
{
req = (from item in query
select new SelectListItem
{
Selected = item.TYP.IdTypeMission == idTypeMission,
Value = SqlFunctions.StringConvert((double)item.TYP.IdTypeMission),
Text = item.ML.French
}).ToList();
}
else
{
req = (from item in query
select new SelectListItem
{
Selected = item.TYP.IdTypeMission == idTypeMission,
Value = SqlFunctions.StringConvert((double)item.TYP.IdTypeMission),
Text = item.ML.English
}).ToList();
}
var query=来自context.TYP\u TypeMission中的TYP
在type.IDTMultiLanguage上的context.t语言中连接ML等于ML.IDTMultiLanguage
其中,TYP.idtFilile==idFilile
orderby type.LibTypeMission
选择新的{ML,TYP};
列表请求;
如果(Site.Lang==“DE”)
{
req=(来自查询中的项)
选择新的SelectListItem
{
所选=item.TYP.IdTypeMission==IdTypeMission,
Value=SqlFunctions.StringConvert((double)item.TYP.IdTypeMission),
Text=item.ML.derman
}).ToList();
}
else if(Site.Lang==“FR”)
{
req=(来自查询中的项)
选择新的SelectListItem
{
所选=item.TYP.IdTypeMission==IdTypeMission,
Value=SqlFunctions.StringConvert((double)item.TYP.IdTypeMission),
Text=item.ML.French
}).ToList();
}
其他的
{
req=(来自查询中的项)
选择新的SelectListItem
{
所选=item.TYP.IdTypeMission==IdTypeMission,
Value=SqlFunctions.StringConvert((double)item.TYP.IdTypeMission),
Text=item.ML.English
}).ToList();
}
在调用
ToList()
之前,不会执行查询。您可以将查询的开头保存到变量中,以后只更改最后一部分:
var query = from TYP in context.TYP_TypeMission
join ML in context.TLanguage on TYP.IDTMultiLanguage equals ML.IDTMultiLanguage
where TYP.IDTFiliale == idFiliale
orderby TYP.LibTypeMission
select new { ML, TYP };
List<SelectListItem> req;
if(Site.Lang == "DE")
{
req = (from item in query
select new SelectListItem
{
Selected = item.TYP.IdTypeMission == idTypeMission,
Value = SqlFunctions.StringConvert((double)item.TYP.IdTypeMission),
Text = item.ML.German
}).ToList();
}
else if(Site.Lang == "FR")
{
req = (from item in query
select new SelectListItem
{
Selected = item.TYP.IdTypeMission == idTypeMission,
Value = SqlFunctions.StringConvert((double)item.TYP.IdTypeMission),
Text = item.ML.French
}).ToList();
}
else
{
req = (from item in query
select new SelectListItem
{
Selected = item.TYP.IdTypeMission == idTypeMission,
Value = SqlFunctions.StringConvert((double)item.TYP.IdTypeMission),
Text = item.ML.English
}).ToList();
}
var query=来自context.TYP\u TypeMission中的TYP
在type.IDTMultiLanguage上的context.t语言中连接ML等于ML.IDTMultiLanguage
其中,TYP.idtFilile==idFilile
orderby type.LibTypeMission
选择新的{ML,TYP};
列表请求;
如果(Site.Lang==“DE”)
{
req=(来自查询中的项)
选择新的SelectListItem
{
所选=item.TYP.IdTypeMission==IdTypeMission,
Value=SqlFunctions.StringConvert((double)item.TYP.IdTypeMission),
Text=item.ML.derman
}).ToList();
}
else if(Site.Lang==“FR”)
{
req=(来自查询中的项)
选择新的SelectListItem
{
所选=item.TYP.IdTypeMission==IdTypeMission,
Value=SqlFunctions.StringConvert((double)item.TYP.IdTypeMission),
Text=item.ML.French
}).ToList();
}
其他的
{
req=(来自查询中的项)
选择新的SelectListItem
{
所选=item.TYP.IdTypeMission==IdTypeMission,
Value=SqlFunctions.StringConvert((double)item.TYP.IdTypeMission),
Text=item.ML.English
}).ToList();
}
在调用
ToList()
之前,不会执行查询。可以按如下方式对映射进行参数化:
public class TLanguageMap : EntityTypeConfiguration<TLanguage>
{
public TLanguageMap(string language)
{
this.HasKey(t => t.TLanguageId);
this.Property(t => t.Translation).HasColumnName(language);
}
}
以及其构造器:
public LocalizableContext(string language)
{
this._language = language;
}
现在,在构建上下文时,您可以确定它是哪种语言:
var context = new LocalizableContext("French");
查询将始终为:
...
select new SelectListItem
{
Selected = TYP.IdTypeMission == idTypeMission,
Value = SqlFunctions.StringConvert((double)TYP.IdTypeMission),
Text = ML.Translation
})
您可能希望通过对语言使用
enum
和switch
语句来获取数据库列名,从而使其更加健壮。可以像这样对映射进行参数化:
public class TLanguageMap : EntityTypeConfiguration<TLanguage>
{
public TLanguageMap(string language)
{
this.HasKey(t => t.TLanguageId);
this.Property(t => t.Translation).HasColumnName(language);
}
}
以及其构造器:
public LocalizableContext(string language)
{
this._language = language;
}
现在,在构建上下文时,您可以确定它是哪种语言:
var context = new LocalizableContext("French");
查询将始终为:
...
select new SelectListItem
{
Selected = TYP.IdTypeMission == idTypeMission,
Value = SqlFunctions.StringConvert((double)TYP.IdTypeMission),
Text = ML.Translation
})
您可能希望通过对语言使用
enum
和switch
语句来获取数据库列名,从而使其更加健壮。谢谢,但我希望在查询中创建一个间接寻址。谢谢,但我希望在查询中创建一个间接寻址。这是一个有趣的解决方案。不幸的是,我使用'ObjectContext'而不是'DBContext'来创建我的上下文,我不能使用'OnModelCreating'。这是一个有趣的解决方案。不幸的是,我使用'ObjectContext'而不是'DBContext'来创建我的上下文,我不能使用'OnModelCreating'。