Linq到SQL搜索通配符在双
本文关键字:通配符 搜索 SQL Linq | 更新日期: 2023-09-27 18:12:44
在Linq SQL中,我试图搜索double类型的值:
var q = from a in db.GetTable<HKKS_Medlemmer>()
from g in db.HKKS_Get_grader_Kun_Grad(Convert.ToInt32(a.Skif))
where a.Aktiv == true &&
(a.Skif.ToString().StartsWith(SearchValue) ||
SqlMethods.Like(a.Navn, "%" + SearchValue + "%") ||
SqlMethods.Like(a.Mellemnavn, "%" + SearchValue + "%") ||
SqlMethods.Like(a.Efternavn, "%" + SearchValue + "%") ||
SqlMethods.Like(a.Adresse, "%" + SearchValue + "%") ||
SqlMethods.Like(a.Telefon, "%" + SearchValue + "%") ||
SqlMethods.Like(a.Mobil, "%" + SearchValue + "%") ||
SqlMethods.Like(a.PostNr, "%" + SearchValue + "%") ||
SqlMethods.Like(a.town, "%" + SearchValue + "%") ||
SqlMethods.Like(a.mail, "%" + SearchValue + "%"))
orderby a.Navn
select new
{
Grad = g.Grad,
Skif = a.Skif,
Navn = a.Navn,
Mellemnavn = a.Mellemnavn,
Efternavn = a.Efternavn,
Adresse = a.Adresse,
Telefon = a.Telefon,
Mobil = a.Mobil,
PostNr = a.PostNr,
town = a.town,
mail = a.mail,
Picture = "http://www.hkks.dk/" + a.Picture,
Age = db.fn_GetAge((a.CPR), DateTime.Now),
Cpr = a.CPR
};
我也试过这个:
var u = from a in db.GetTable<HKKS_Medlemmer>()
from g in db.HKKS_Get_grader_Kun_Grad(Convert.ToInt32(a.Skif))
.Where (p => Object.Equals(a.Skif, SearchValue))
orderby a.Navn
select new
{
Grad = g.Grad,
Skif = a.Skif,
Navn = a.Navn,
Mellemnavn = a.Mellemnavn,
Efternavn = a.Efternavn,
Adresse = a.Adresse,
Telefon = a.Telefon,
Mobil = a.Mobil,
PostNr = a.PostNr,
town = a.town,
mail = a.mail,
Picture = "http://www.hkks.dk/" + a.Picture,
Age = db.fn_GetAge((a.CPR), DateTime.Now),
Cpr = a.CPR
};
但是没有一个给我正确的结果,如果我搜索994并期望结果给我99469的记录。
有什么建议吗?
根据您的评论,.StartsWith
方法生成以下SQL:
(CONVERT(NVARCHAR(30), [t0].[Skif], 2) LIKE @p11)
可以使用下面的SQL来说明这个问题:
DECLARE @val AS FLOAT
SET @val = 99469
SELECT CONVERT(NVARCHAR(30), @val, 2)
如果您运行该SQL,您将看到输出是一个绝对不是以"994"开头的字符串:
9.946900000000000e+004
为了在不使用e+
符号的情况下将99469转换为字符串,您可以这样重写语句:
Convert.ToInt32(a.Skif).ToString().StartsWith(SearchValue)
这将生成以下SQL,它应该解决这个问题:
WHERE (CONVERT(NVarChar,CONVERT(Int,[t0].[Skif]))) LIKE @p11
如果你能像这样声明就好了:
a.Skif.ToString("####").StartsWith(SearchValue)
但.ToString()
方法不支持LINQ到SQL(当我尝试时,我得到了Method 'System.String ToString(System.String)' has no supported translation to SQL.
错误消息)。
同样,可能还有其他的解决方法。使用EF4, SqlFunctions
中可能有一些东西允许您在一步中进行转换,而无需转换为INT
(或BIGINT
,如有必要)。实际上,所有LINQ to SQL需要做的就是生成语句,最后一个参数是0,而不是2(即CONVERT(NVARCHAR(30), @val, 0)
)。
希望对你有帮助。