2009-08-12 88 views
0

我得到的 “丑” 的LINQ to SQL查询:有没有更好的方法来处理接受null的varchar字段?

Dim f = (From d In db.Addresses Where ((_address.Address1 Is Nothing AndAlso d.Address1.Equals(Nothing)) OrElse (_address.Address1 IsNot Nothing AndAlso d.Address1.Equals(_address.Address1))) And _ 
             ((_address.Address2 Is Nothing AndAlso d.Address2.Equals(Nothing)) OrElse (_address.Address2 IsNot Nothing AndAlso d.Address2.Equals(_address.Address2))) And _ 
             ((_address.City Is Nothing AndAlso d.City.Equals(Nothing)) OrElse (_address.City IsNot Nothing AndAlso d.City.Equals(_address.City))) And _ 
             ((_address.POBox Is Nothing AndAlso d.POBox.Equals(Nothing)) OrElse (_address.POBox IsNot Nothing AndAlso d.POBox.Equals(_address.POBox))) And _ 
             ((_address.PostalCode Is Nothing AndAlso d.PostalCode.Equals(Nothing)) OrElse (_address.PostalCode IsNot Nothing AndAlso d.PostalCode.Equals(_address.PostalCode))) And _ 
             ((_address.ZipCode Is Nothing AndAlso d.ZipCode.Equals(Nothing)) OrElse (_address.ZipCode IsNot Nothing AndAlso d.ZipCode.Equals(_address.ZipCode))) And _ 
             ((_address.CountryProvinceID Is Nothing AndAlso d.CountryProvinceID.Equals(Nothing)) OrElse (_address.CountryProvinceID IsNot Nothing AndAlso d.CountryProvinceID.Equals(_address.CountryProvinceID)))) 

所以产生这种查询

SELECT [t0].[AddressID], [t0].[Address1], [t0].[Address2], [t0].[City], [t0].[CountryProvinceID], [t0].[POBox], [t0].[PostalCode], [t0].[ZipCode] 
FROM [dbo].[Address] AS [t0] 
WHERE ([t0].[Address1] IS NULL) AND ([t0].[Address2] = @p0) AND ([t0].[City] IS NULL) AND ([t0].[POBox] IS NULL) AND ([t0].[PostalCode] = @p1) AND ([t0].[ZipCode] IS NULL) AND ([t0].[CountryProvinceID] IS NULL) 
------------------------------- 
@p0 [AnsiString]: a 
@p1 [AnsiString]: a 

是有办法清理,只是一点点?

它的作用是在表检查,如果一个地址匹配一个由用户输入

回答

0

HAAA ....解决的办法是.....

Dim f = (From d In db.Addresses Where Object.Equals(d.Address1, _address.Address1) And _ 
              Object.Equals(d.Address2, _address.Address2) And _ 
              Object.Equals(d.City, _address.City) And _ 
              Object.Equals(d.POBox, _address.POBox) And _ 
              Object.Equals(d.PostalCode, _address.PostalCode) And _ 
              Object.Equals(d.ZipCode, _address.ZipCode) And _ 
              Object.Equals(d.CountryProvinceID, _address.CountryProvinceID)) 
0

你张贴什么不看我像它的检查一个空字符串,除非你指PostalCode和@ p0是空字符串。

如果是这样的话,我会做这样的:

(From d In db.Addresses Where (d.PostalCode.Equals(Nothing) 
    OrElse (d.PostalCode.Equals(_address.PostalCode) 
     AndAlso Not String.IsNullOrEmpty(d.PostalCode)))) 
+0

IsNullOrEmpty不LINQ2SQL支载 – Fredou 2009-08-12 18:12:36

相关问题