[英]Return entities with id contained in list
我正在尝试做类似SQL'in'的事情,据我了解它在某种程度上等效于LINQ中的“ contains”。
这是我在阅读了其他几个类似的问题之后提出的查询,并且... http://blogs.msdn.com/b/alexj/archive/2009/03/26/tip-8-writing-其中,在风格的查询,使用,LINQ到entities.aspx
public ActionResult recentbookings(string recent_bookings)
{
List<booking> bookings = db.bookings.Where(s => recent_bookings.Contains("36525")).ToList();
return PartialView("_recentbookings", bookings);
}
该查询返回表中的每个记录。 我希望并且希望查询返回一条记录,该记录与我传递的ID相匹配。
'recent_bookings'的值来自本地存储,通过JavaScript调用...
var url = '@Url.Action("recentbookings", "booking")';
url += "?recent_bookings="+ localStorage['recent_bookings'];
$("#ajaxresult").load(url);
本地存储中恰好只有一项,即“ 36525”,与我的查询中的硬编码“ Contains(“ 36525”)”匹配。
我相信我的查询逻辑存在一个简单的问题,因为与SQL相比,我并不真正理解它。
一旦解决了这个问题,我将继续从传入的字符串中解析出多个值。
public ActionResult recentbookings(string recent_bookings)
{
var recent_bookings_array = new[] { int.Parse(recent_bookings) };
booking[] bookings = db.bookings.Where(s =>
recent_bookings_array.Contains(s.Id)).ToArray();
return PartialView("_recentbookings", bookings);
}
您使用的.contains错误。 没错,它就像一个IN子句,但是调用的对象。包含的对象应该类似于SQL查询的IN (36525)
部分。 上面的查询基本上是在说“给我所有的预订ID在此最近预订ID数组中的预订。”
为什么您的结果返回所有预订记录?
...因为Where子句参数是Func<T, bool>
。 意思是,lambda表达式的结果必须为true或false。 您的问题中的表达式s => recent_bookings.Contains("36525")
始终返回true,因为字符串“ 36525”包含在您的last_bookings变量中。 由于始终为真,因此将返回所有行。 您从不检查任何数据,仅检查局部变量。
另外,不要在结果上调用.ToList,除非您需要在返回视图之前对其添加/删除项目。 .ToArray更快,但是返回一个不可变的集合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.