C# Linq查询过滤器
我有一个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
- 制造商:一个元件
- 个人: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](IEnumerable1 source)
在
…c_uuu显示类别5.b_uuu4(。。。
模型)在
…aspx.cs:line
70 at System.Linq.Enumerable.WhereListIterator
1.MoveNext()at
System.Collections.Generic.List1..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());
}