LINQ选择要在运行时查询的表

时间:2012-05-12 05:22:58

标签: c# .net sql database linq

我是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];

任何建议都表示赞赏,对于模糊不清抱歉。我假设我错过了连接字符串或其他东西。我已经逐步完成了这个,代码显然没有连接到表格。

2 个答案:

答案 0 :(得分:4)

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

至于您列出的代码无效的原因,您的怀疑基本上是正确的:它没有连接到任何数据库。您正在创建一个新的空表并尝试查询它。要使其工作,您需要使用 SqlConnection 连接到数据库,然后使用 SqlDataAdapter 及其填充方法填充数据表即可。 (但是,请尽可能不要这样做,请阅读SQL外键。)

答案 1 :(得分:3)

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

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

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