Dize Karşılaştırması Yapıyor Sorunlar LINQ'a ihtiyacım olan sorguya bir şey çevirmesi konusunda sorun yaşıyorum. T-SQL'de < = ve CHAR (6) sütunları olan üç sütun üzerinde karşılaştırma yapıyoruz. LINQ bana 'string' türü 'dizesi' arasında işlenen uygulanan edilemezLINQ
Operatör '< =' beri bunu yapmasına izin vermez.
Ben BETWEEN
için destek olmadığından yukarıda çok LINQ freindly değildir ..
SELECT *
FROM [ZIPMASTER] zm
WHERE zm.CORP = 12
AND '85546 ' BETWEEN zm.ZIPBEG AND zm.ZIPEND
aşağıdaki T-SQL sorgusu var. Böylece, aşağıdaki basitleştirilmiş var: Aşağıdaki LINQ sorgu oluşturmak için kullandık
SELECT *
FROM [ZIPMASTER] zm
WHERE zm.CORP = 12
AND zm.ZIPBEG <= '85546 '
AND zm.ZIPEND >= '85546 '
:
var zipLinqQuery =
from z in db.ZIPMASTERs
where z.CORP == 12
&& z.ZIPBEG <= "85546 "
&& z.ZIPEND >= "85546 "
select z;
List<ZIPMASTER> zips = zipLinqQuery.ToList<ZIPMASTER>();
C# - LINQ çok fazla bu sorguyu sevme değil. Ben ints dönüştürmeyi denedim ve daha sonra karşılaştırarak, bazı durumlarda posta kodu bir harf içerebilir. Örneğin, aşağıdaki ifade T-SQL true değerlendirirsiniz:
WHERE '85546B' BETWEEN '85546A' AND '85546D'
o T-SQL çalışır, ancak benim tahminim tarafından ayrı ayrı dizide her bir karakteri karşılaştırır olmasıdır tam olarak neden bilmiyorum sayısal ASCII değerine dönüştürülür.
Her halükarda, size sağlayabileceğiniz her türlü yardım büyük beğeni topluyor. Şimdiden teşekkürler. (Jon Skeet tarafından gönderildi)
CJAM
Çözüm:
O string.CompareTo() aslında gerekli T-SQL oluşturmak yapar anlaşılmaktadır. Aşağıdaki örnekler:
var zipLinqQuery =
from z in db.ZIPMASTERs
where z.CORP == listItem.CORP
&& z.ZIPBEG.CompareTo(listItem.ZIPCODE) <= 0
&& z.ZIPEND.CompareTo(listItem.ZIPCODE) >= 0
select z;
aşağıdaki T-SQL üretir:
DECLARE @p0 INT, @p1 CHAR(6), @p2 CHAR(6)
SET @p0 = 12
SET @p1 = '85546 '
SET @p2 = '85546 '
SELECT [t0].[CORP], [t0].[ZIPEND], [t0].[ZIPBEG], [t0].[CITY], [t0].[STATE], [t0].[CYCLE]
FROM [dbo].[ZIPMASTER] AS [t0]
WHERE ([t0].[CORP] = @p0) AND ([t0].[ZIPBEG] <= @p1) AND ([t0].[ZIPEND] >= @p2)
Bu çalışma ancak herhangi bir şekilde dışarı genel amaçlı uzantısı yöntemi yapmak için gelmez o? Bununla biraz oynadım ama L2S'nin çevirebileceği hiçbir şeyle gelemedim. IEnumerables için iş yaptım. – andleer