在Linq to 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的记录,那么他们都没有给我正确的结果。
有什么建议吗?
答案 0 :(得分:0)
从您的评论.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 to 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)
)。
希望有所帮助。