【问题标题】:How to put where condition in select condition in Linq query如何在 Linq 查询中将 where 条件放入 select 条件中
【发布时间】:2019-03-10 14:41:08
【问题描述】:

我有一个问题。在这里,我想根据 FieldsDatafield 的某些条件进行过滤。我该怎么做?

以下是我的 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();

我知道我们不能将 where 条件放在我们想要的任何地方。但我想根据条件选择 FieldsDataField 列。 谁能帮帮我吗?可能吗?

仅供参考:

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 是表格的列。

【问题讨论】:

  • 我知道不可能将这样的条件放在哪里或放在选择条件中。但我愿意接受任何形式的建议或帮助。
  • 工作的代码和工作的代码一模一样,你是不是复制粘贴出错了?
  • 对不起!你现在可以检查一下吗?

标签: c# asp.net linq dataset


【解决方案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 表达式使用另一种表示法。

【讨论】:

  • 我将通过添加您的代码的编译错误屏幕截图来编辑我的帖子。请看一下
  • 您的代码中似乎已经定义了一个名为 query 的变量或参数。您可以尝试在我发布的代码中更改它以使用另一个变量名吗?
【解决方案2】:

你得到了什么编译错误?

以下是我的回答:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    相关资源
    最近更新 更多