我在dapper中做了一些编码,我得到错误没有映射存在从对象类型到已知的托管提供者本机类型这个错误发生在myfriends var for dapper上。我正在使用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();
可能会发生什么......
myfriends
是List<friend>
。然后,您将其作为查询参数传递,即
new {friendship=myfriends}
有:
AND profileID=@friendship
现在...... @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