是否可以使用LINQ迭代两个集合?
我有ObservableCollection
我想填写,目前我只是使用典型的foreach
循环。
我使用一个循环遍历一个string
数组,而不是使用该值我检查每个bool
值是否为true并将该值添加到Collection中。
public ObservableCollection<StaffInfo> Display = new ObservableCollection<StaffInfo>();
public void MasterDataDisplay()
{
string[] data = new[] {"a", "b", "c"};
foreach (var section in data)
{
var filter = Db.StaffInfos.Where(p => p.Section == section);
foreach (var item in filter)
{
if (item.CurrentStaff == true)
{
Display.Add(item);
}
}
}
}
是否可以使用单个LINQ查询执行此类操作?或者我正在做的最好的方法是什么?
答案 0 :(得分:3)
不确定。您基本上是在寻找CurrentStaff
属性为true且Section
属性包含在data
集合中的项目:
Display = new ObservableCollection<StaffInfo>(
Db.StaffInfos
.Where(p => p.CurrentStaff == true
&& data.Contains(p.Section))
);
关于Contains
的好处是它在SQL中创建了一个IN
子句,因此您可以在一个查询中而不是在3中获取数据。
答案 1 :(得分:1)
您的代码从数据库中读取数据并检查其值。您无需循环执行此操作,只需重写代码即可执行单个查询:
var items=from item in Db.StaffInfos
where data.Contains(item.Section) && item.CurrentStaff
select item;
Display.AddRange(items);
或同等的:
var items=Db.StaffInfos
.Where(item => data.Contains(item.Section) && item.CurrentStaff);
Display.AddRange(items);
这里的“技巧”是someData.Contains(field)
。包含被转换为field IN (data1, data2,data3)
子句