如何在Linq查询中的选择条件中放置条件

时间:2018-10-05 06:40:47

标签: c# asp.net linq dataset

After adding Mickaël Derriey's code. I am getting compile error. Can you tell me what's wrong. ?我有问题。在这里,我想根据某些条件过滤字段数据字段。我该怎么办?

以下是我的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是表的列。

2 个答案:

答案 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
        };
    });