带有Contains和Array的Linq语句

时间:2018-03-27 14:23:32

标签: c# linq model-view-controller

我有以下foreach语句,它返回我的数组中的所有值(customerConfigTypes)。 我只想返回特定值。

我要做的是,如果我的Array(customerConfigTypes)的值为“A”且我的模型(m.ConfigurationType)值为A,我只想返回该特定类型。

因此,没有看到包含在最佳背景下的含义......最好的方法是什么?

 var customerConfigTypes = new 
 Models.ReportConfiguration.ReportConfigurationType[]
     {
               ReportConfigurationType.CustomerFlagReport,
               ReportConfiguration.ReportConfigurationType.SalesReport,

     };

@foreach (var vm in Model.Where(m =>customerConfigTypes.Contains(m.ConfigurationType) && 
  m.ReportConfigurationId > 0 ))

       {

   <div class="title-card @if (!hasCreateReportPermission) {<text> disabled</text> }">
               <a class="inner" href="@Url.Action("Index", "ReportsAngular", new { area = "Angular", ReportType="CustomerFlagReport", ConfigurationId=vm.ReportConfigurationId, CanConfigureReports = hasCreateReportPermission })#/">
                <i class="fa fa-wrench"></i>
                <h3 class="panel-title">@vm.ConfigurationName</h3>
                <p>@vm.ConfigurationDescription</p>

            </a>
        </div>

这是我的模型布局

public class ReportConfigurationViewModel : IReportConfigurationViewModel, IXmlSerializable
{
    public int? ReportConfigurationId { get; set; }
    public string ConfigurationName { get; set; }
    public string ConfigurationDescription { get; set; }
    public bool IsTemplate { get; set; }
    public ReportConfigurationType ConfigurationType { get; set; }
    public String ReportTitle { get; set; }
    public virtual IEnumerable<IFilterViewModel> Filters { get; set; }
    public IEnumerable<IFilterViewModel> SelectedFilters { get; set; }
    public IEnumerable<IReportingColumnViewModel> SelectedColumns { get; set; }
    public IEnumerable<IReportSummaryColumnViewModel> SelectedReportSummaryColumns { get; set; }
    public IEnumerable<IReportGroupingColumnViewModel> SelectedReportGroupingColumns { get; set; }
    public IEnumerable<IReportSortingColumnViewModel> SelectedReportSortingColumns { get; set; }
    public string ModeType { get; set; }
    public bool SuppressReportSummaryTitles { get; set; }
    public bool SuppressPageSummaryTitles { get; set; }
    public bool SuppressGroupSummaryTitles { get; set; }
    public System.Xml.Schema.XmlSchema GetSchema() { return null; }

1 个答案:

答案 0 :(得分:1)

你反过来做了。您不必使用Where。只需查看类型是否匹配,foreach (var vm in customerConfigTypes.Where(m => m == Model.ConfigurationType)) { // do something } 子句将返回集合。

List<T>

使用FIDDLE进行更新:

Here is a working Fiddle of your exact model

更新模型列表

您希望在模型中使用customerConfigurationTypes。这将使您实现您想要的。这将允许您获取视图模型并使用提供给视图的public class TestVm { public ReportConfigurationType ConfigType { get; set; } public string Name { get; set; } } public class ConfigurationViewModel { public List<TestVm> ReportConfigurations { get; set; } } 列表交叉引用它们。

课程更新

var results = model.ReportConfigurations.Where(m => customerConfigTypes.Contains(m.ConfigType));

foreach (var result in results.Where(m => m.ReportConfigurationId > 0))
{
    <p>@result.ConfigurationDescription</p>
}

代码更新

mysqli_query()

Working Fiddle with updated example