我在dapper中进行一些编码,我得到错误从对象类型到已知托管提供者本机类型没有映射 myfriends var上出现此错误小巧玲珑。我正在使用dapper从表中获取INT值列表,然后将它们与另一个进行比较..这是给我错误的代码
int myid = Convert.ToInt32(User.Identity.Name);
// The var myfriend is giving me that error above
var myfriends = sqlConnection.Query<friend>("Select otherfriendsID from friends where profileID=@myidd", new { myidd = myid }).ToList();
var profiles = sqlConnection.Query<profile>("Select top 40 * from profiles where photo is not null AND profileID=@friendship order by profileID desc", new {friendship=myfriends}).ToList();
但是,如果我使用实体,一切正常,例如下面的代码可以工作..
var myfriends = (from s in db.friends where s.profileID == myid select s.otherfriendsID).ToList();
这里可能会发生什么......
答案 0 :(得分:1)
myfriends
是List<friend>
。然后将其作为查询参数传递,即
new {friendship=myfriends}
使用:
AND profileID=@friendship
现在...... @friendship
是什么?它应该如何传递到List<friend>
这里?什么甚至意味着传递一个对象列表(每个对象可能有多个属性)作为单个参数? (注意:出于这个问题的目的,我忽略了表值参数)
那么:你期待多少myfriends
? 0? 1?任何数字?例如,这可能是:
var profileIds = myfriends.Select(x => x.ProfileId);
...
new {profileIds}
...
AND profileID in @profileIds
或者也许:
new {profileId = myfriends.Single().ProfileId}
...
AND profileID = @profileId