简体   繁体   English

如何在Linq查询中将where条件放在select条件中

[英]How to put where condition in select condition in Linq query

添加MickaëlDerriey的代码后。我收到编译错误。你能告诉我什么是错的吗? ? I have an issue. 我有一个问题。 Here i want to filter based on some condition for Fields and Datafield . 在这里,我想根据FieldsDatafield的某些条件进行过滤。 How can i do that? 我怎样才能做到这一点?

Below is my linq query: Note: This piece of code is working. 下面是我的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();

And i want to do something like this, but it's not possible.: Note: Below code is not working. 我想做这样的事情,但这是不可能的。 注意:下面的代码不起作用。 showing compile error. 显示编译错误。

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

I know we cannot put where condition wherever we want. 我知道无论我们想要什么,我们都无法放在哪里。 But i want to select Fields and DataField columns based on condition. 但我想根据条件选择FieldsDataField列。 Can anyone please help me? 谁能帮帮我吗? Is it possible? 可能吗?

Just for reference: 仅供参考:

public partial class Query
{
    public string DataSetName { get; set; }
    public string CommandText { get; set; }
    public int Key { get; set; }
    public string Value { get; set; }
}

Note: CommandText, DataSetName, Fields and DictVal are the columns of the table. 注意: CommandText,DataSetName,Fields和DictVal是表的列。

welcome to StackOverflow 👋! 欢迎来到StackOverflow👋!

I'd go with something like: 我会选择以下内容:

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

This uses the other notation for lamda expressions where they declare a full body. 这使用了lamda表达式的另一种表示法,它们声明了一个完整的正文。

What compile error did you get? 你得到了什么编译错误?

Following is my answer: 以下是我的回答:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM