【问题标题】:LINQ selecting a table to query at runtimeLINQ 在运行时选择要查询的表
【发布时间】:2012-05-12 05:22:58
【问题描述】:

我是 LINQ 的新手,正在尝试编写一个查询,该查询根据运行时输入的变量选择要查询的表。基本思想是我为 Persons 表中的每个人都有一个 Contacts 表。我可以从实体中获取我想要的所有数据,但是在查询时找不到另一个表。这是代码;

    public void GetFriendsList(string username, Person[] people)
    {     
        string table = "FL." + username;

        DataTable friends = new DataTable(table);

            var filePaths =
            from row in friends.AsEnumerable()
            select row.Field<string>("Friend's Name");

        var friendsArray = filePaths.ToArray();

        for (int i = 0; i < people.Length; i++)
        {
            people[i] = GetPerson(friendsArray[i]);
        }     
    }

我也尝试过在顶部使用类似下面的内容,但 VS 无法识别 FillDataSet 函数。

DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);

DataTable products = ds.Tables[table];

感谢您的任何建议,对于含糊之处深表歉意。我假设我缺少连接字符串或其他东西。我已经完成了这个并且代码显然没有连接到表格。

【问题讨论】:

  • 您似乎没有使用 Linq2Sql 或实体框架或任何实际连接到数据库的东西? FillDataSet 是 DataAdapter 类(SqlDataAdapter、OdbcDataAdapter 等)之一的实例成员。见msdn.microsoft.com/en-us/library/ms171920(v=vs.80).aspx
  • @Euphoric “我为 Persons 表中的每个人都有一个 Contacts 表” - 他说的很好,他的观点是面向对象的。所以存在阻抗不匹配,他认为是在对象方面,但他使用的组件(ADO.NET)只支持关系看待事物,实际上几乎是原始的,几乎是扁平的。他应该使用 ORM,这样他就可以在对象方面工作
  • @MichaelBuen 这并不能成为他不具备 SQL 工作原理的基本知识的借口。
  • @Euphoric 抱歉我缺乏数据库知识。我所读到的只是基本概念和查询。正如 MB 所说,我是一个面向对象的思想家,只是在黑暗中蹒跚而行,直到我发现自己是一个工作数据库。

标签: c# .net sql database linq


【解决方案1】:

Euphoric 在 cmets 中是正确的,如果有点粗鲁的话。你不可能为每个人都有一个单独的联系人表。正常的方法是有一个单一的 Contacts 表,并放一个外键链接回 Persons 表。这样您就可以在单个查询中完成所有操作,而不必担心在运行时之前查询未知的表。

至于您列出的代码为什么不起作用,您的怀疑基本上是正确的:它没有连接到任何数据库。您正在创建一个新的空表并尝试对其进行查询。要使其工作,您需要使用 SqlConnection 连接到数据库,然后使用 SqlDataAdapter 及其 Fill 方法来填充您的 >数据表。 (但同样,如果可能,请不要这样做,请阅读 SQL 外键。)

【讨论】:

    【解决方案2】:

    首先,您并没有真正使用 LINQ 来查询您的数据库。

    但最重要的是,您的数据库中应该只有 1 个 Contacts 表与 Persons 表有关系。

    获取 Microsoft 示例 Northwind 数据库 (http://www.microsoft.com/en-us/download/details.aspx?id=23654) 并了解有关数据库架构设计的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-30
      相关资源
      最近更新 更多