我正在尝试将 SQL 语句转换为 LINQ 并且遇到了一些困难。基本上,我正在尝试查询包含产品导航数据的 DataTable(4 个类别级别的 ID 和描述,例如男士 > 夹克 > 夏季 > 套头衫)。导航类别应按顺序出现且没有“重复”。我的意思是,一旦描述出现在数据行中,它可能会再次发生,但是一旦它更改为另一个描述,它就不能再变回之前的描述。我在 Access 中开发了这个 SQL 查询,它似乎对我的测试数据做了我需要它做的事情:
SELECT Count(Nav.Level1Text) AS CountOfLevel1Text, Nav.Level1ID, Nav.SO, Nav.DC, Nav.Language
FROM Nav
GROUP BY Nav.Level1ID, Nav.SO, Nav.DC, Nav.Language
HAVING Count(Nav.Level1Text) > 1;
这是我到目前为止所得到的:
var query = from table in navTable.AsEnumerable()
group table by new
{
Cat1Id = table["Cat1Id"],
Cat1Text = table["Cat1Desc"],
SalesOrg = table["SalesOrg"],
DistChan = table["DistChan"],
Language = table["Language"]
}
into groupedTable
where groupedTable.Key.Cat1Text.Count() > 1 //Count doesn't exist
select new {Cat1Count = groupedTable.Key.Cat1Text.Count(), groupedTable.Key.Cat1Id, groupedTable.Key.SalesOrg,
groupedTable.Key.DistChan, groupedTable.Key.Language};
看起来我已经很接近了,但是我在“哪里”这块上遇到了麻烦。我不知道如何获得 Level1Text 的计数(没有 Cat1Text.Count 方法,但我把它留在里面来演示我认为它应该做什么)。
编辑:所以我意识到我没有很清楚地解释这一点,但是查询检测到何时有一个 Cat1Id 分配给了 2 个不同的 Cat1Desc。这就是我所说的“重复”。例如,如果 Cat1Id 为“1”且 Cat1Desc 为“Mens”,然后出现 Cat1Id 为“2”且 Cat1Desc 为“Womens”,则此查询应该让我知道,因为“Count(Cat1Desc) > 1”使用不同的 ID。