Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ在运行时选择要查询的表_C#_.net_Sql_Database_Linq - Fatal编程技术网

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

C# LINQ在运行时选择要查询的表,c#,.net,sql,database,linq,C#,.net,Sql,Database,Linq,我是LINQ新手,尝试编写一个查询,根据运行时输入的变量选择要查询的表。其基本思想是,我为Persons表中的每个人都有一个Contacts表。我可以从实体中获得我想要的所有数据,但在查询时找不到另一个表。这是代码 public void GetFriendsList(string username, Person[] people) { string table = "FL." + username; DataTable friend

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

感谢您的任何建议,抱歉含糊不清。我假设我丢失了一个连接字符串或其他东西。我已经完成了这一步,代码显然没有连接到表。

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

但最重要的是,您的数据库中应该只有一个与
人员
表有关系的
联系人


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

注释中的欣快语是正确的,尽管有点粗鲁。你不可能为每个人都有一个单独的联系人表。通常的方法是使用一个Contacts表,并将一个外键链接回Persons表。这样,您就可以在单个查询中完成所有操作,并且不必担心在运行时之前查询未知的表


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

看起来您使用的不是Linq2Sql或实体框架或任何实际连接到数据库的东西?FillDataSet是其中一个DataAdapter类(SqlDataAdapter、OdbcDataAdapter等)上的实例成员。参见@Euphoric“我有一个联系人表,每个人都在一个联系人表中”-他说的很好,他的观点是面向对象的。所以阻抗不匹配,他从对象的角度来考虑,然而他使用的组件(ADO.NET)只支持关系型,事实上几乎是原始的,几乎是扁平的。他应该使用ORM,这样他就可以在objects@MichaelBuen这并不能原谅他不了解SQL的基本工作原理。@Ephoric为我缺乏数据库知识而感到抱歉。我所读到的只是基本概念和疑问。正如MB所说,我是一个OO思考者,只是在黑暗中蹒跚前行,直到我发现自己是一个正在工作的db。
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);

DataTable products = ds.Tables[table];