【问题标题】:LINQ Query to get Column Headers in SilverlightLINQ 查询以获取 Silverlight 中的列标题
【发布时间】:2011-06-28 19:35:29
【问题描述】:

我正在使用 WCF 服务开发 Silverlight 应用程序,我需要从特定表中获取所有列标题。我一直在尝试编写一个 LINQ 查询来执行此操作,但到目前为止我还无法让它正常工作。我没有找到很多与此有关的信息。我找到了以下信息,但我无法连接到我的数据。

http://www.c-sharpcorner.com/UploadFile/dhananjaycoder/4856/#ReadAndPostComment

到目前为止,我已经尝试了以下...由于 DataContext 需要一个参数,这将无法编译,这就是我卡住的地方。

public List<string> GetColumnHeaders()
{
    DataContext context = new DataContext();
    List<string> columnList = new List<string>();
    var dataModel = context.Mapping;

    foreach (var r in dataModel.GetTables())
    {
        if (r.TableName.Equals("table1", StringComparison.InvariantCultureIgnoreCase))
        {
            foreach (var c in r.RowType.DataMembers)
            {
                columnList.Add(c.MappedName);
            }
        }
    }
    return columnList;
}

而不是使用DataContext context = new DataContext(); 我尝试了以下方法,但我知道问题是一样的。

var dataModel = new AttributeMappingSource()
                 .GetModel(
                      typeof(RepositoryBase<HBS_SondesEntities>
                 ));

【问题讨论】:

  • @Nix 我发布了我的服务调用的方法。
  • DataContext 是一个基类,因此您需要插入 your 上下文。你用的是EF吗? LINQ2SQL ?您的数据来自哪里?
  • @Nix 我正在使用 EF。我遵循了使用存储库模式的 Microsoft 教程,因此我有一个 RepositoryBase 类。我发布的代码来自一个子类。 RepositoryBase 类让我有些困惑,这可能是我访问上下文的主要问题。
  • 您尝试使用HBS_SondesEntities() 吗?
  • @Nix 我尝试使用 HBS_SondesEntities 但它也不起作用。当我进入 foreach 循环时,应用程序会抛出 NullReferenceException。

标签: c# .net silverlight wcf linq


【解决方案1】:

这是我对解决方案的最佳尝试,很难真正理解您尝试/编写的内容。

public List<string> GetColumnHeaders(){
  List<string> columnList = new List<string>();
  using (SondesEntities context = new HBS_SondesEntities()){
    foreach (var r in context.Mapping.GetTables()){
       if (r.TableName
             .Equals("table1", StringComparison.InvariantCultureIgnoreCase)) {

           foreach (var c in r.RowType.DataMembers){
               columnList.Add(c.MappedName);
           }
       }
     }
  }
  return columnList;
}

假设我没有胖手指这里的东西是使用 linq 的相同代码。

public List<string> GetColumnHeaders(){

    List<string> columnList = new List<string>();
    using (SondesEntities context = new HBS_SondesEntities()){
        var query = (
           context.Mapping.GetTables()
             .Where(t=>t.TableName
                        .Equals(
                         "table1", 
                          StringComparison.InvariantCultureIgnoreCase)
                        )
             ).SelectMany(x=>x.RowType.DataMembers);

        columnList  = query.Select(m=>m.MappedName).ToList()
    }
    return columnList;
}

【讨论】:

  • 我收到错误:找不到类型或命名空间名称“SondesEntities”(您是否缺少 using 指令或程序集引用?)。你知道我还有什么办法可以解决这个问题吗?这在 Windows 窗体应用程序中要简单得多。
  • 您需要添加对创建上下文的 dll/项目的引用。
  • 有没有办法使用 LINQ 来获取 Headers 而不必使用 Mapping?
  • 当我将 LINQ 添加到 SQL 数据时,这确实有效。我试图避免这种情况,所以我找到了一种完全不同的方法来解决这个问题。不过,感谢您的所有帮助!
  • 我试图完全避免使用 LINQ to SQL,因为由于使用 EF 和我的 Repository Base 类而开始遇到问题。我没有添加 LINQ to SQL 类,这就是代码不起作用的原因。当我添加这个时,您的代码运行良好。
【解决方案2】:

这可能会有所帮助:

http://jesseliberty.com/2009/08/13/linq-for-silverlight-developers/

我不确定你所说的表格是什么意思,但如果它是一个数据网格,链接应该会有所帮助。

【讨论】:

  • 我不是试图从数据网格中获取标题,而是从我的 WCF 服务中获取。我所说的表是指数据库中加载到应用程序中的表。在关于的链接中,他使用了他编写的 DataContext 类来使用 Mapping 访问列名,但是我不完全确定该类应该包含什么或如何创建它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2014-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多