C# 如何在Select语句中联接datarow数组中的两列?

C# 如何在Select语句中联接datarow数组中的两列?,c#,datarow,C#,Datarow,我的数据库表名中有两个列名和族:Member。 我想用姓名+家族全名搜索成员列表,但我在列中没有全名。 我使用此代码在“名称”列中搜索: 但我如何在全名列+家族列上执行搜索?您可以选择并连接2列: CONCAT_WS(' ', name, family) AS full_name 在SQL查询中。您可以在选择方法中指定多个条件,例如: myTable.Select(string.Format("Name = '{0}' AND Family='{1}",name,surname)); 不过,

我的数据库表名中有两个列名和族:Member。 我想用姓名+家族全名搜索成员列表,但我在列中没有全名。 我使用此代码在“名称”列中搜索:


但我如何在全名列+家族列上执行搜索?

您可以选择并连接2列:

CONCAT_WS(' ', name, family) AS full_name

在SQL查询中。

您可以在选择方法中指定多个条件,例如:

myTable.Select(string.Format("Name = '{0}' AND Family='{1}",name,surname));
不过,这是一种非常低效的数据加载方式,因为在可能只需要一行数据的情况下加载整个表。这就是为什么在生产代码中永远不会使用这种技术,除非表中包含很少的要缓存的行


典型的方法是编写只返回所需行的SQL语句。您可以编写自己的参数化查询,也可以使用Visual Studio的数据集设计器,方法是右键单击适配器并选择“添加查询”。编写SQL语句并像在SQL中一样定义任何参数,例如@name、@family。设计器将创建一个执行查询并返回带有结果的datatable的方法

在C中这样做没有意义,但是在Linq中通过串联进行过滤是这样的:

SearchResult = new Member().List().Where(x => String.Format("{0} {1}", x.Name, x.Family) == txt_Checkout_Member.Text));

如果datatable是由dataset生成的,则此操作有效。如果不使用x.ItemArray[列号]替换x.Name和x.Family

列表返回什么?此代码不会搜索任何内容。实际执行搜索的代码在哪里?您使用的是SQL Server、Oracle、MySQL和其他数据库?您正在使用哪种数据访问技术?ADO.NET,NHibernate,Entity Framework?DataTable,这是一个用于数据库中所有表的过程,返回所有数据select*from。List返回所有数据,这段代码搜索来自SQL SERVER数据库的所有数据,我使用ADO.NET这是一个非常低效的过程。您应该执行不同的SQL查询以仅返回所需的数据。无论如何,您可以在select语句中指定多个条件,方式与SQL的select类似。我想在c程序中执行此操作,而不是在SQL中,因为我不想保存或发送无用的数据,但这正是您现在正在做的-在您只需要一行时加载所有内容感谢您的帮助,但是,当我想使用不同的列(如姓名、家庭、Id等)进行搜索时,您认为哪一个更好?1.加载所有数据并使用Select进行搜索。2.使用不同的列创建多个搜索过程,如GetData_FromId、GetData_FromName、GetData_FromAge等。我的意思是为每个搜索列创建一个过程,因为不可能为所有列创建一个过程。?
SearchResult = new Member().List().Where(x => String.Format("{0} {1}", x.Name, x.Family) == txt_Checkout_Member.Text));