使用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表达式中,您正在执行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>
类型