2009-10-21 48 views
0

我正在通过L2S运行一个存储过程,它返回'指定的转换无效'。存储的proc在手动运行时返回数据,当我直接通过它时,一切都很好,直到它尝试在“foreach(var row in result)”中创建行对象时为止。LinqToSql给'指定的转换无效'

var q = new db(); 
var result = q.GetNearbyLocations(latitude, longitude,searchDistance); 
foreach (var row in result) 
    { 
     var c = new Clinic() 
       { 
        Name = row.CLINIC_NAME.Trim(), 
        Address1 = row.DRADR1.Trim()... 

想法?

+0

Clinic.Name,Clinic.Address1,row.CLINIC_NAME和row.DRADR1的数据类型是什么? – 2009-10-21 14:45:06

+0

我发现这个链接无价... http://msdn.microsoft.com/en-us/library/ms131092.aspx – Lazarus 2009-10-21 14:50:57

回答

1

这通常是由数据类型不匹配造成的,例如,如果存储过程返回一个int并将其映射到一个字符串,或者存储过程返回一个varchar(1)并映射到System.Char。

+0

sproc动态创建一个字符串变量并执行它。 Linq不喜欢这样。为了让Linq正确读取返回类型,我必须将其注释掉并放入等效的sql语句中。不知何故,这在designer.cs中没有发生,返回类型是int,而不是记录集。我更改了sproc,重新导入并将spro改回到执行字符串变量。现在都很开心。 谢谢大家! – 2009-10-22 15:03:39

1

在执行foreach语句之前,您的sporc实际上不会被调用。因此,确保LINQ to SQL可以正确地将从sproc返回的数据映射到对象。