我有问题。在这里,我想根据某些条件过滤字段和数据字段。我该怎么办?
以下是我的linq查询: 注意:这段代码有效。
DataSet queries = query.GetQueryDetails(reportName);
str = queries.Tables[1].AsEnumerable().Select(dataRow => new Query { CommandText = dataRow.Field<string>("CommandText"), DataSetName = dataRow.Field<string>("DataSetName"), Key = dataRow.Field<int>("Fields"), Value=dataRow.Field<string>("DataField") }).ToList();
我想做这样的事情,但这是不可能的: 注意:以下代码不起作用。显示编译错误。
DataSet queries = query.GetQueryDetails(reportName);
str = queries.Tables[1].AsEnumerable().Select(dataRow => new Query { CommandText = dataRow.Field<string>("CommandText"), DataSetName = dataRow.Field<string>("DataSetName"), Key = dataRow.Field<int>("Fields").Where(dataRow.Field<int>(("DictVal") == "Key")), Value=dataRow.Field<string>("DataField").Where(dataRow.Field<string>(("DictVal") == "Value")) }).ToList();
我知道我们不能在任何地方放置条件。但我想根据条件选择 Fields 和 DataField 列。 谁能帮帮我吗?可能吗?
仅供参考:
public partial class Query
{
public string DataSetName { get; set; }
public string CommandText { get; set; }
public int Key { get; set; }
public string Value { get; set; }
}
注意:CommandText,DataSetName,Fields和DictVal是表的列。
答案 0 :(得分:1)
欢迎使用StackOverflow!
我会选择类似的东西:
str = queries
.Tables[1]
.AsEnumerable()
.Select(dataRow =>
{
var query = new Query
{
CommandText = dataRow.Field<string>("CommandText"),
DataSetName = dataRow.Field<string>("DataSetName")
};
switch (dataRow.Field<string>("DictVal"))
{
case "Key":
query.Key = dataRow.Field<int>("Fields");
break;
case "Value":
query.Value = dataRow.Field<string>("DataField");
break;
}
return query;
})
.ToList();
对于lamda表达式,它们声明了完整的正文,因此使用了另一种表示法。
答案 1 :(得分:0)
您遇到了什么编译错误?
以下是我的答案:
str = queries.Tables[1]
.AsEnumerable()
.Select(dataRow =>
{
var dictVal = dataRow.Field<string>("DictVal");
return new Query
{
CommandText = dataRow.Field<string>("CommandText"),
DataSetName = dataRow.Field<string>("DataSetName"),
Key = dictVal == "Key"
? dataRow.Field<int>("Fields")
: int.MinValue,
Value = dictVal == "Value"
? dataRow.Field<string>("DataField")
: string.Empty
};
});