从LINQ查询中选择列,其中单元格等于列表中的值

时间:2014-09-24 07:41:16

标签: c# linq compare observablecollection

我从LINQ查询中将数据添加到ObservableCollection:

foreach (var item in test4)
{
   lstPareto.Add(new clsPareto(Convert.ToInt32(item.Step), Convert.ToInt32(item.LogID), test3.Where(p => p.Step.Equals(item.Step) && p.LogID.Equals(item.LogID)).Count()));
}

这很好用。我得到了我想要的项目,并在将它们添加到列表时将它们转换为int。

然后我有以下查询从多个数据库中提取数据:

int intCmbTestNr = Convert.ToInt32(m_strCmbTestNrSelectedItem);

var productIndex = (from x in m_dcSQL_ConnectionProdTest.DC3_VersionReleases
                    where x.TestNumber.Equals(intCmbTestNr)
                    select x.ProductIndex).First();

var version = ((from y in m_dcSQL_ConnectionProdTest.DC3_MainSetups
                where y.ProductIndex == productIndex && y.SubVersion == 0
                select y.Version).Max());

var versionIndex = (from z in m_dcSQL_ConnectionProdTest.DC3_MainSetups
                    where z.ProductIndex == productIndex && z.Version.Equals(version) && z.SubVersion == 0
                    select z.VersionIndex).First();

var subFuncName = from a in m_dcSQL_ConnectionProdTest.DC3_SubFunctions
                  where a.VersionIndex == versionIndex && a.FunctionNumber == lstPareto.Select(b => b.intStep) && a.SubFunctionNumber == lstPareto.Select(c => c.intStep)
                  select a.SubFunctionName;

考虑subFuncName。我在这里想要实现的是将a.FunctionNumber与intStep和a.SubFunctionNumber比较为列表lstPareto的intLogID。但是,它说:“运算符'=='不能应用于'type'和'System.Collections.Generic.IEnumerable'类型的操作数。我想我知道这个的原因,因为我正在尝试将单个int与整个集合进行比较。但是如何与列表中的每个单项intStep和intLogID进行比较?我似乎无法绕过这个。我在某个地方使用foreach循环吗?有人能让我回到正轨吗?

对不起,如果标题有点模糊,真的不能想到一个好的。

1 个答案:

答案 0 :(得分:0)

如果FunctionNumberSubFunctionNumber都是int:s。然后你可以将条件改为:

lstPareto.Select(b => b.intStep).Contains(a.FunctionNumber) 
&&  lstPareto.Select(c => c.intStep).Contains(a.SubFunctionNumber)

<强>更新

原因很可能是因为您在查询中没有.ToList().First().Single()。取决于你的期望。您可以将其更改为:

var subFuncName = (from a in m_dcSQL_ConnectionProdTest.DC3_SubFunctions
                  where a.VersionIndex == versionIndex && lstPareto.Select(b => b.intStep).Contains(a.FunctionNumber) 
                  &&  lstPareto.Select(c => c.intStep).Contains(a.SubFunctionNumber)
                  select a.SubFunctionName).ToList();

参考: