Как поставить условие "где" в условии выбора в запросе Linq - PullRequest
0 голосов
/ 05 октября 2018

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

Я знаю, что мы не можем поставить условие куда угодно.Но я хочу выбрать Поля и 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 голосов
/ 05 октября 2018

Какую ошибку компиляции вы получили?

Вот мой ответ:

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
        };
    });
0 голосов
/ 05 октября 2018

добро пожаловать в 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();

Здесь используются другие обозначения для лямда-выражений, в которых они объявляют полное тело.

...