Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回列表中包含id的实体_C#_Linq_Entity Framework_Contains - Fatal编程技术网

C# 返回列表中包含id的实体

C# 返回列表中包含id的实体,c#,linq,entity-framework,contains,C#,Linq,Entity Framework,Contains,我正在尝试做一些类似SQL“in”的事情,据我所知,这或多或少相当于LINQ中的“contains” 这是我在阅读了其他几个类似问题后提出的问题,这个。。。 本地存储中恰好只有一项,即“36525”,它与我查询中硬编码的“Contains”(“36525”)”匹配 我相信我的查询逻辑有一个简单的问题,因为与中的SQL相比,我并不真正理解它 一旦我把它整理好,我将继续从传入字符串中解析出多个值 public ActionResult recentbookings(string recent_bo

我正在尝试做一些类似SQL“in”的事情,据我所知,这或多或少相当于LINQ中的“contains”

这是我在阅读了其他几个类似问题后提出的问题,这个。。。

本地存储中恰好只有一项,即“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子句,但是您在上调用的对象.Contains应该类似于SQL查询的
IN(36525)
部分。上面的查询基本上是说“给我所有预订ID在最近预订ID数组中的预订。”

为什么您的结果会返回所有预订记录?

…因为Where子句参数是
Func
。也就是说,lambda表达式的结果必须是true或false。问题中的表达式,
s=>recent_bookings.Contains(“36525”)
将始终返回true,因为字符串“36525”包含在您的recent_bookings变量中。因为它总是正确的,所以所有的行都会返回。您从未对数据进行过任何检查,只检查了局部变量

另一方面,除非在返回视图之前需要在结果中添加/删除项,否则不要调用.ToList来显示结果。ToArray速度快得多,但返回一个不可变的集合

您使用的.Contains不正确。您是对的,它类似于IN子句,但是您在上调用的对象.Contains应该类似于SQL查询的
IN(36525)
部分。上面的查询基本上是说“给我所有预订ID在最近预订ID数组中的预订。”

为什么您的结果会返回所有预订记录?

…因为Where子句参数是
Func
。也就是说,lambda表达式的结果必须是true或false。问题中的表达式,
s=>recent_bookings.Contains(“36525”)
将始终返回true,因为字符串“36525”包含在您的recent_bookings变量中。因为它总是正确的,所以所有的行都会返回。您从未对数据进行过任何检查,只检查了局部变量


另一方面,除非在返回视图之前需要在结果中添加/删除项,否则不要调用.ToList来显示结果。ToArray速度快得多,但返回的是一个不可变的集合。

作为一个小的添加,值得注意的是,
s=>recent_bookings.Contains(“36525”)
实际上意味着您选择了所有记录,只要36525在您最近的_bookings.Contains中。通常,任何表达式
s=>xyz
都将根据xyz返回所有s或无s。当lambda表达式不包括左侧和右侧的零件时,请始终保持警惕。@oerkelens是的,观点正确。我也会在回答中提到这一点。太好了!几个注释-您已将其转换为列表,然后转换为阵列。。。List bookings=db.bookings.Where(s=>recent_bookings_array.Contains(s.Id)).ToArray();我尝试强制转换为数组…array bookings=db.bookings.Where(s=>recent_bookings_array.Contains(s.Id)).ToArray();但这会产生错误“…不能与类型参数一起使用”,所以我现在坚持使用列表。@Ethatpleton您是对的,这是事后的想法。我已经更新了答案,以显示如何键入变量。它是
booking[]
,而不是
Array
。您还可以使用
var
。作为一个小的补充,值得注意的是
s=>最近的预订。包含(“36525”)
实际上意味着您正在选择所有记录,只要36525在最近的预订中。通常,任何表达式
s=>xyz
都将根据xyz返回所有s或无s。当lambda表达式不包括左侧和右侧的零件时,请始终保持警惕。@oerkelens是的,观点正确。我也会在回答中提到这一点。太好了!几个注释-您已将其转换为列表,然后转换为阵列。。。List bookings=db.bookings.Where(s=>recent_bookings_array.Contains(s.Id)).ToArray();我尝试强制转换为数组…array bookings=db.bookings.Where(s=>recent_bookings_array.Contains(s.Id)).ToArray();但这会产生错误“…不能与类型参数一起使用”,所以我现在坚持使用列表。@Ethatpleton您是对的,这是事后的想法。我已经更新了答案,以显示如何键入变量。它是
booking[]
,而不是
Array
。您也可以使用
var
var url = '@Url.Action("recentbookings", "booking")';
url += "?recent_bookings="+ localStorage['recent_bookings'];
$("#ajaxresult").load(url);
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);
}