如何将多个linq语句转换为selectmany

时间:2009-10-07 18:01:38

标签: c# linq lambda

我是LINQ和lambda函数的初学者。我想知道如何使用selectmany函数将多个linq语句转换为一个语句。

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 个答案:

答案 0 :(得分:3)

如果您想要单个查询,则可以将选择值设置为匿名类型。但返回值的范围是创建类型的方法。

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

答案 1 :(得分:0)

我认为SelectMany不符合你的想法。它通常只是一个扁平的操作。在这种情况下,为什么你认为它对你有帮助?为什么要避免两个查询?