【发布时间】:2018-07-17 04:28:54
【问题描述】:
我有一个如下所示的 SQL 查询,我必须在 C# 的实体框架中编写一个等效的查询。我必须在表之间进行连接,并且必须对搜索字符串中的每个单词使用 SQL LIKE 运算符。在给定的示例中,搜索字符串是“Life-Span Development 16E 99 Subject Index”。我一直在尝试为此编写 c# 代码,但无法达到预期的结果。能否请您帮我将 SQL 查询转换为实体框架等效查询?
SQL 查询:
SELECT
[titles].[title],
[assets].[filename]
FROM
titles
INNER JOIN
assets ON titles.ID = assets.ID
WHERE
(title LIKE '%Life-Span%'
AND title LIKE '%Development%'
AND title LIKE '%16E%'
AND title LIKE '%99%'
AND title LIKE '%Subject%'
AND title LIKE '%Index%')
*C#代码:
static void Main(string[] args)
{
string searchText = "Life-Span Development 16E 99 Subject Index";
using (Entities db = new Entities())
{
var result = db.titles
.Join(db.assets,
p => p.tid,
e => e.tid,
(p, e) => new {
title = p.title1,
fileName = e.filename
});
var searchTextArray = searchText.ToLower().Split(' ');
result = result.Where(t => searchTextArray.Any(s => t.title.ToLower().Contains(s)));
foreach(var item in result)
{
Console.WriteLine(string.Format("Title = {0} and finename = {1}", item.title, item.fileName));
}
}
Console.ReadKey();
}
【问题讨论】:
-
这可以编译吗?看起来 foreach 不能与 var 一起使用?
-
@AlexanderToptygin 它编译并运行。对于每个使用 var 的作品都没有任何问题。
-
@Simant 有用吗?如果没有,它怎么行不通?
-
那么,您需要获得多大的动态?因为作为基本情况,您总是可以 db.SqlQuery("SELECT......").ToList();
-
@Simant 你试过用 .All(....) 代替 .Any 吗?
标签: c# entity-framework linq entity-framework-6