簡體   English   中英

將此SQL查詢轉換為Linq

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM