使用linq从数据集MVC 4中过滤数据

本文关键字:过滤 数据 MVC linq 数据集 使用 | 更新日期: 2023-09-27 17:59:45

说到MVC-4,我简直就是个胎儿——这是我第一周尝试使用它。所以请原谅我的无知。我创建了一个数据集,并设法将数据显示为Tables[0]我现在被要求做的是使用linq和一个参数来过滤Tables[0]。。我一直在看一些其他代码,看起来像这样。。

public void Execute()
{
    _model._contractsModel.UserAccess = new UserAccessQuery().GetData();
    IEnumerable<string> userAccess = (from row in _model._contractsModel.UserAccess.Tables[0].AsEnumerable()
                                      where row.Field<string>("NOTES") == _model.filteredName
                                      select row);
    var list = new List<string>();
    if (userAccess.Count() != 0)
    {
        list = userAccess.ToList();
        _model.UserAccess = list[0];
    }
}

然而,"where"告诉我它是错误的

使用linq从数据集MVC 4中过滤数据

在LINQ表达式中,您正在执行select row。这意味着,在执行where子句筛选之后,它将选择DataRow的集合,特别是EnumerableRowCollection<DataRow>。但您正试图将其分配给List<string>。这就是问题所在。

您应该将变量类型从List更改为EnumerableRowCollection<DataRow>,或者甚至可以使用类型推断

EnumerableRowCollection<DataRow> userAccess = (from row in 
                                  _model._contractsModel.UserAccess.Tables[0].AsEnumerable()
                                  where row.Field<string>("NOTES") == _model.filteredName
                                  select row);

var userAccess = (from row in 
                                  _model._contractsModel.UserAccess.Tables[0].AsEnumerable()
                                  where row.Field<string>("NOTES") == _model.filteredName
                                  select row);

在这两种情况下,userAccess类型将相同。因此,如果你想要一个单列值,你可以像一样访问它

if (userAccess.Any())
{
    var firstNoteRow = userAccess.First();
    var notStringVal = firstNoteRow["NOTES"];
}

或者如果您想在LINQ表达式本身中进行列选择,也可以这样做。

var userAccessNotes = (from row in 
                                  _model._contractsModel.UserAccess.Tables[0].AsEnumerable()
                                  where row.Field<string>("NOTES") == _model.filteredName
                                  select row["NOTES"] as string).ToList();

此处userAccessNotes将为List<string> 类型