Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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# Linq查询过滤器_C#_Asp.net_Asp.net Mvc_Linq_Webforms - Fatal编程技术网

C# Linq查询过滤器

C# Linq查询过滤器,c#,asp.net,asp.net-mvc,linq,webforms,C#,Asp.net,Asp.net Mvc,Linq,Webforms,我有一个Linq查询,奇怪的是,它总是返回一个不包含元素的序列。数据确实存在,我看到了以下计数: 制造商:一个元件 个人:314张唱片 以下查询返回错误: var people = Query<PersonModel>(getPeople) .Where(model => model.FirstName.Contains(search) || model.LastName.Contains(search)) || mode

我有一个Linq查询,奇怪的是,它总是返回一个不包含元素的序列。数据确实存在,我看到了以下计数:

  • 制造商:一个元件
  • 个人:314张唱片
以下查询返回错误:

var people = Query<PersonModel>(getPeople)
     .Where(model => model.FirstName.Contains(search) || 
          model.LastName.Contains(search)) ||
          model.ManufacturerId.Contains(manufacturers.First().ManufacturerId.ToString()))
     .ToList();
var-people=Query(getPeople)
.Where(model=>model.FirstName.Contains(search)|
model.LastName.Contains(搜索))||
model.ManufacturerId.Contains(manufacturers.First().ManufacturerId.ToString())
.ToList();
据我所知,
。其中
将根据收集的结果进行过滤。为什么错误不包含顺序中的元素。

堆栈跟踪:

在System.Linq.Enumerable.First[TSource](IEnumerable
1 source)
在 …c_uuu显示类别5.b_uuu4(。。。 模型)在 …aspx.cs:line 70 at System.Linq.Enumerable.WhereListIterator
1.MoveNext()at System.Collections.Generic.List
1..ctor(IEnumerable
1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)at …BTN搜索\u单击(对象发送者,事件参数 e) 在 …aspx.cs:line 69 at System.Web.UI.WebControls.Button.OnClick(EventArgs e)at System.Web.UI.WebControl.Button.RaisePostBackEvent(字符串 事件参数)在 System.Web.UI.WebControl.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串 事件参数)在 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument)位于 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
位于System.Web.UI.Page.ProcessRequestMain(布尔值 IncludeStages前同步点,布尔值IncludeStages后同步点)

试试这个

var people = Query<PersonModel>(getPeople)
 .Where(model => model.FirstName.Contains(search) || 
      model.LastName.Contains(search) ||
      (manufacturers != null && manufacturers.Any(a => a.ManufacturerId == model.ManufacturerId)))
 .ToList();
var-people=Query(getPeople)
.Where(model=>model.FirstName.Contains(search)|
model.LastName.Contains(搜索)||
(manufacturers!=null&&manufacturers.Any(a=>a.ManufacturerId==model.ManufacturerId)))
.ToList();

好吧,关于例外情况的罪魁祸首的最初评论是
First()
是正确的。我可以通过以下方式绕过例外情况:

 var manufacturers = Build<ManufacturerModel>(getManufacturer)
     .Where(model =>
          model.ManufacturerName.Contains(search));

 if(manufacturers.Any())
      manufacturer = manufacturers.FirstOrDefault().ManufacturerId.ToString();

然后,当超出该循环时,只需对人员执行
。Where
,并将所述结果添加到
过滤器
列表中。

该错误来自
First()
@SLaks您能详细说明一下吗,我在中看到了结果吗?是因为它没有被展平吗?堆栈跟踪是什么?检查
制造商
是否至少包含一个元素。可能是
查询(getPeople)
以某种方式清除了
制造商
的内容?
people = Build<PersonModel>(getPeople);
foreach (var person in people)
{
     var m = person.ManufacturerIDs.Split(',')
         .Where(id => (manufacturers != null && manufacturers.Any(item => String.Compare(item.ManufacturerId.ToString(), id, true) == 0))).ToList();

     var r = person.ManufacturerIDs.Split(',')
          .Where(id => (repAgencies != null && repAgencies.Any(item => String.Compare(item.RepAgencyId.ToString(), id, true) == 0))).ToList();

     if (m.Any() || r.Any())
          filter.AddRange(people.Where(model => model.PersonId == person.PersonId).ToList());
}