繁体   English   中英

返回ID包含在列表中的实体

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM