как конвертировать несколько операторов linq в selectmany - PullRequest
0 голосов
/ 07 октября 2009

Я новичок с функциями LINQ и lambda. Мне было интересно, как я могу преобразовать несколько операторов linq в один оператор, используя функцию selectmany.

string viewname = (from a in StoredProcedureParameters.Tables[0].AsEnumerable()
                 where a.Field<string>("ViewName") == displayName
                 select a.Field<string>("View")).Single();

DateTime date = (from d in StoredProcedureParameters.Tables[0].AsEnumerable()
                select d.Field<DateTime>("Date")).First();

Заранее спасибо за помощь.

Ответы [ 2 ]

3 голосов
/ 07 октября 2009

Если вы хотите один запрос, вы можете иметь значение select анонимного типа. Но областью действия возвращаемого значения является метод, в котором создается тип.

var result = (from a in StoredProcedureParameters.Tables[0].AsEnumerable()
                 where a.Field<string>("ViewName") == displayName
                 select new { View = a.Field<string>("View"),
                              Date = d.Field<DateTime>("Date") }).Single();

тогда переменной результата будет объект со свойствами «Вид» и «Дата». Вы не можете вернуть это значение из метода, хотя. Если вам нужно вернуть значение, вы можете создать простой класс

public class ViewDate
{
  public string View { get; set; }
  public DateTime Date { get; set; }
}

Затем, используя инициализатор объекта, вы получите результат, содержащий экземпляр объекта ViewDate, который вы можете вернуть из вашего метода.

var result = (from a in StoredProcedureParameters.Tables[0].AsEnumerable()
                 where a.Field<string>("ViewName") == displayName
                 select new ViewDate() { View = a.Field<string>("View"),
                              Date = d.Field<DateTime>("Date") }).Single();
0 голосов
/ 07 октября 2009

Я не думаю, что SelectMany делает то, что вы думаете, делает. Обычно это просто плоская операция. Как вы думаете, почему это поможет вам в этом случае? Почему вы хотите избежать двух запросов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...