C#中如何用Linq在SQL Server的表中多列检索多个关键字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中如何用Linq在SQL Server的表中多列检索多个关键字相关的知识,希望对你有一定的参考价值。

就是说我的表里有多列,每一列都要去检索某个关键字,然而这个关键字在一个数组中,要求数组中的每个值都要在表中进行检索,只要有某个列包含该关键字则该记录满足条件。然后检索结果要合并成一个表。前提是数组是动态的,不固定大小。比如我的表是Wuzi,关键字为keyword,表中的列为Column1,Column2,Column3。求速答。

参考技术A var result = from p in Wuzi
where keyword.Contains(p.Column1)
|| keyword.Contains(p.Column2)
|| keyword.Contains(p.Column3)
selelct p;

嗯,大概就是这样子。

如何从 SQL Server 中的表中删除重复行 [重复]

【中文标题】如何从 SQL Server 中的表中删除重复行 [重复]【英文标题】:how to remove duplicate rows from a table in SQL Server [duplicate] 【发布时间】:2013-02-13 17:18:28 【问题描述】:

我有一个名为table1 的表,其中包含重复值。它看起来像这样:

new
pen
book
pen
like
book
book
pen

但我想从该表中删除重复的行并将它们插入另一个名为table2 的表中。

table2 应该是这样的:

new 
pen
book
like

如何在 SQL Server 中执行此操作?

【问题讨论】:

您在这个问题上使用了c# 标签,因为......?到目前为止,您尝试过什么?阅读FAQ 和How to Ask newlike 在哪里重复出现在 table 中? 这个问题不是链接问题的重复,因为 a.与链接问题不同,该表没有主键(它否定了链接问题中的大多数解决方案),并且 b。它正在将数据传输到另一个表。 【参考方案1】:

假设该字段名为name

INSERT INTO table2 (name)
SELECT name FROM table1 GROUP BY name

该查询将为您提供所有唯一名称。

如果需要,您甚至可以将它们放入表变量中:

DECLARE @Table2 TABLE (name VARCHAR(50))

INSERT INTO @Table2 (name)
SELECT name FROM table1 GROUP BY name

或者你可以使用临时表:

CREATE TABLE #Table2 (name VARCHAR(50))

INSERT INTO @Table2 (name)
SELECT name FROM table1 GROUP BY name

【讨论】:

"从该表中删除重复的行" 我怎样才能用他们创建table2???@Michael @Magnus:你是对的。感觉中间有一个编辑——我在第一次甚至第二次阅读时都没有看到。 @MichaelPerrenoud Yeh,你可能是对的。 @meo,请看我的更新。谢谢!【参考方案2】:

您可以使用INSERTSELECTs 轻松完成此操作,而CTE 则使用ROW_NUMBER(),例如:

DECLARE @YourTable table (YourColumn varchar(10))
DECLARE @YourTable2 table (YourColumn varchar(10))
INSERT INTO @YourTable VALUES ('new')
INSERT INTO @YourTable VALUES ('pen')
INSERT INTO @YourTable VALUES ('book')
INSERT INTO @YourTable VALUES ('pen')
INSERT INTO @YourTable VALUES ('like')
INSERT INTO @YourTable VALUES ('book')
INSERT INTO @YourTable VALUES ('book')
INSERT INTO @YourTable VALUES ('pen')

;WITH OrderedResults AS
(
SELECT
    YourColumn, ROW_NUMBER() OVER (PARTITION BY YourColumn ORDER BY YourColumn) AS RowNumber
    FROM @YourTable
)
INSERT INTO @YourTable2 
        (YourColumn)
    SELECT YourColumn FROM OrderedResults
        WHERE RowNumber=1

从 @YourTable2 中选择 *

输出:

YourColumn
----------
book
like
new
pen

(4 row(s) affected)

您可以在使用ROW_NUMBER()CTE 上使用DELETE 轻松完成此操作,例如:

--this will just remove them from your original table
DECLARE @YourTable table (YourColumn varchar(10))
INSERT INTO @YourTable VALUES ('new')
INSERT INTO @YourTable VALUES ('pen')
INSERT INTO @YourTable VALUES ('book')
INSERT INTO @YourTable VALUES ('pen')
INSERT INTO @YourTable VALUES ('like')
INSERT INTO @YourTable VALUES ('book')
INSERT INTO @YourTable VALUES ('book')
INSERT INTO @YourTable VALUES ('pen')

;WITH OrderedResults AS
(
SELECT
    YourColumn, ROW_NUMBER() OVER (PARTITION BY YourColumn ORDER BY YourColumn) AS RowNumber
    FROM @YourTable
)
DELETE OrderedResults
    WHERE RowNumber!=1

SELECT * FROM @YourTable

输出:

YourColumn
----------
new
pen
book
like

(4 row(s) affected)

【讨论】:

【参考方案3】:

几周前,我使用 DELETE TOP X 发布了一些关于删除重复项的内容。显然,仅针对一组重复项。然而,在 cmets 中,Joshua Patchak 给了我这颗小宝石。

;WITH cte(rowNumber) AS
(SELECT ROW_NUMBER() OVER (PARTITION BY [List of Natural Key Fields] 
ORDER BY [List of Order By Fields]) 
FROM dbo.TableName)

DELETE FROM cte WHERE rowNumber>1

这将删除表格中的所有重复项。 如果您想阅读讨论,这是原始帖子。 Duplicate rows in a table.

【讨论】:

以上是关于C#中如何用Linq在SQL Server的表中多列检索多个关键字的主要内容,如果未能解决你的问题,请参考以下文章

SQL SERVER 中如何用脚本管理作业

c#中如何用list对文本文件中的词语按行去重并统计每个词语的次数

sql server数据库中如何用游标进行更新

在试听中如何用SQL选中从表选取所有列

在 C# 中将 SQL 查询转换为 LINQ 方法语法

ORACLE中如何用DBMS_OUTPUT包输出表的所有数据