[英]Convert this SQL query into Linq
我有使用Linq2SQL,SQL Server,.net 4.5的ac#webforms应用程序
我知道SQL还算不错,但我发现的LINQ 非常艰苦的工作。
SQL通常比较棘手,但我发现linq几乎不可能编写,除非可以在线找到相同的示例。 这次我找不到一个。
我在SQL中使用视图来简化过程,并消除了将疯狂的linq语法将表连接在一起的需求,但是由于视图不允许ORDER BY
语句,所以我有些卡住。 我可以使查询在存储过程中正常运行,但是我放弃了尝试在经过5个小时的“网”搜索后通过linq返回数据以了解操作方法。
原始的ORDER BY
对“ Name
列进行排序,但在该字段的开头忽略了“ The”,给出了:
Apple
The Banana
Orange
Pear
这是SQL查询:
SELECT TOP 100 Name, Year, Data1, Data2
FROM v_List_Items
ORDER BY
CASE WHEN LOWER(SUBSTRING(Name, 1, 4)) = 'the '
THEN SUBSTRING(Name, 5, len(Name))
ELSE NAME
END ASC
有任何想法吗 ?
能够动态更改100个结果过滤器也很有用。
谢谢
我将以下sql插入代码写入表中
INSERT INTO NamedFruit(Name) Values('Apple')
GO
INSERT INTO NamedFruit(Name) Values('The Banana')
GO
INSERT INTO NamedFruit(Name) Values('Orange')
GO
INSERT INTO NamedFruit(Name) Values('Pear')
使用以下查询
NamedFruits.OrderBy(s=>s.Name.StartsWith("The ") ? s.Name.Substring(4) : s.Name);
结果:
Apple
The Banana
Orange
Pear
应该没问题。
生成的sql是:
-- Region Parameters
DECLARE @p0 VarChar(1000) = 'The %'
DECLARE @p1 Int = 4
-- EndRegion
SELECT [t0].[Name]
FROM [NamedFruit] AS [t0]
ORDER BY
(CASE
WHEN [t0].[Name] LIKE @p0 THEN CONVERT(NVarChar,SUBSTRING([t0].[Name], @p1 + 1, CONVERT(Int,DATALENGTH([t0].[Name]))))
ELSE CONVERT(NVarChar,CONVERT(NVarChar(20),[t0].[Name]))
END)
不知道这是否适用于Ling to SQL,但应该为您提供一个开始。 我正在使用三元运算符来确定用于排序的字符串。
var fruits = new List<string>
{
"Apple",
"The Banana",
"Orange",
"Pear"
};
var orderedFruits = fruits
.OrderBy(s =>
s.StartsWith("The ")
? s.Substring(4)
: s);
您只需在LINQ内执行SQL,就无需翻译。 例如:
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
IEnumerable<Customer> results = db.ExecuteQuery<Customer>
(@"SELECT c1.custid as CustomerID, c2.custName as ContactName
FROM customer1 as c1, customer2 as c2
WHERE c1.custid = c2.custid"
);
来源: 如何:直接执行SQL查询
这样做会更好,因为您无法保证特定的LINQ片段会生成特定的SQL查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.