繁体   English   中英

检查相关模型是否包含属性

[英]Check if related model contains property

我正在使用t4模板来搭建控制器。 它使用以下代码为模型的相关属性生成SelectList:

<# foreach (var property in relatedProperties.Values) { #>
    ViewBag.<#= property.ForeignKeyPropertyNames[0] #> = new SelectList(db.<#= property.EntitySetName #>, "<#= property.PrimaryKeyNames[0] #>", "<#= property.DisplayPropertyName #>");
<# } #>

在脚手架控制器中,结果是这样的几行:

ViewBag.id_state = new SelectList(db.states, "id", "state_name");

但我希望它检查相关实体是否包含名为“ active”的属性,如果为true,则改为生成此属性:

ViewBag.id_state = new SelectList(db.states.Where(u => u.active == true), "id", "state_name");

我知道在模板中我可以使用property.TypeNameproperty.ShortTypeName拉相关实体的名称,但是不知道如何使用它来执行我想要的操作。

您需要访问特定实体的所有属性。 如果还没有,可以使用typeMapper.GetSimpleProperties(entity)类的东西。 但是,获得这些属性后,搜索属性是否存在仅是以下问题:

// grab all the properties
var properties = typeMapper.GetSimpleProperties(entity);
// search for specific property
var hasActive = properties.Any(p=> p.Name == "active");
// format your output based on that property
var filter = (hasActive) ? ".Where(u => u.active == true)" : "";
<# foreach (var property in relatedProperties.Values) {#>
    ViewBag.<#= property.ForeignKeyPropertyNames[0] #> = new SelectList(db.<#= property.EntitySetName #><#= code.Escape(filter) #>, "<#= property.PrimaryKeyNames[0] #>", "<#= property.DisplayPropertyName #>");
<# } #>

// Or you can put the condition in the foreach statement:

var properties = typeMapper.GetSimpleProperties(entity);
    var hasActive = properties.Any(p=> p.Name == "active");
    var condition = (hasActive) ? ".Where(u => u.active == true)" : "";
<# foreach (var property in relatedProperties.Values) { 
    if(hasActive){
#>.<#= property.ForeignKeyPropertyNames[0] #> = new SelectList(db.<#= property.EntitySetName #>, "<#= property.PrimaryKeyNames[0] #>", "<#= property.DisplayPropertyName #>");
<# } else { #>
    ViewBag.<#= property.ForeignKeyPropertyNames[0] #> = new SelectList(db.<#= property.EntitySetName #><#= property.PrimaryKeyNames[0] #>, "<#= property.PrimaryKeyNames[0] #>", "<#= property.DisplayPropertyName #>");
<# } #>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM