- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一组表示 excel 文档中行的字段,我正试图加快一些 LINQ 语句的处理速度。我可以使用 SQL 轻松表达解决方案,但是,我正在努力寻找高性能的 LINQ 解决方案。这是我为演示问题而编写的查询。
DECLARE @T TABLE(RowNumber INT, FieldName NVARCHAR(25), FieldValue NVARCHAR(25))
INSERT @T( RowNumber, FieldName, FieldValue ) VALUES
(1,'F1','100'),(1,'F2','A'),(1,'F3','A'),
(2,'F1','200'),(2,'F2','A'),(2,'F3','A'),
(3,'F1','300'),(3,'F2','A'),(3,'F3','A'),
(4,'F1','400'),(4,'F2','A'),(4,'F3','A'),
(5,'F1','100'),(5,'F2','B'),(5,'F3','B'),
(6,'F1','100'),(6,'F2','C'),(6,'F3','B'),
(7,'F1','200'),(7,'F2','B'),(7,'F3','B'),
(8,'F1','100'),(8,'F2','A'),(8,'F3','A'),
(9,'F1','100'),(9,'F2','A'),(9,'F3','A'),
(10,'F1','400'),(10,'F2','A'),(10,'F3','A')
;WITH Flattended AS
(
SELECT
RowNumber,
F1=MAX(F1),
F2=MAX(F2),
F3=MAX(F3)
FROM
(
SELECT
RowNumber,
F1=CASE WHEN FieldName='F1' THEN FieldValue ELSE NULL END,
F2=CASE WHEN FieldName='F2' THEN FieldValue ELSE NULL END,
F3=CASE WHEN FieldName='F3' THEN FieldValue ELSE NULL END
FROM @T
)
AS A
GROUP BY RowNumber
),
FlattenedGrouped AS
(
SELECT F1, F2, F3
FROM Flattended
GROUP BY F1,F2,F3
HAVING COUNT(*)>1
)
SELECT
*
FROM
Flattended F
INNER JOIN FlattenedGrouped FG ON FG.F1=F.F1 AND FG.F2=F.F2 AND FG.F3=F.F3
在现实生活中,集合如下所示:
public class Cell
{
public int RowNumber;
public string ColumnName;
public string ColumnValue;
}
public class ThisThing
{
public List<Cell> Cells;
}
我需要找到所有单元格行号,其中单元格字段名称包括“F1”、“F2”和“F3”,并且 F1、F2 和 F3 的值至少匹配一个其他单元格。
在下面的 excel 场景中,将返回行号 1 和 10。
RowNumber F1 F2 F3
1 100 A A
2 200 A A
3 300 A A
4 400 A A
5 500 A A
6 100 A B
7 600 A A
8 700 A A
9 800 A A
10 100 A A
这是我正在处理的 linq:
var _allFirstFieldMatches = properties.Where(p => p.Column == "F1").ToList()
.GroupBy(p => p.Value)
.Where(p => p.Count() > 1)
.Select(p => new
{
RowNumber = p.Min(o => o.RowNumber),
F1 = p.Min(o => o.Value)
});
var _allFirstAndSecondFieldMatches = properties
.Where(p => p.Column == "F2" && _allFirstFieldMatches.Any(p1 => p1.RowNumber == p.RowNumber)).ToList()
.GroupBy(p => p.Value)
.Where(p => p.Count() > 1)
.Select(p => new
{
RowNumber = p.Min(o => o.RowNumber),
F2 = p.Min(o => o.Value)
});
var _allFirstAndSecondAndThirsFieldMatches = properties
.Where(p => p.Column == "F3" && _allFirstAndSecondFieldMatches.Any(p1 => p1.RowNumber == p.RowNumber)).ToList()
.GroupBy(p => p.Value)
.Where(p => p.Count() > 1)
.Select(p => new
{
RowNumber = p.Min(o => o.RowNumber),
F3 = p.Min(o => o.Value)
});
第二次尝试:
var _field1Duplicates = (from o in properties
where o.Column.Equals("F1", StringComparison.InvariantCultureIgnoreCase)
group o by o.Value into g
select new
{
DuplicateCount = g.Count(),
Value = g.Key
})
.ToList().Where(p => p.DuplicateCount > 1);
var _dupField1Objects = (from o in properties
where o.Column.Equals("F2", StringComparison.InvariantCultureIgnoreCase)
join b in _field1Duplicates on o.Value equals b.Value
select new
{
RowNumber = o.RowNumber,
F1 = o.Value,
F2 = properties.Where(p => p.RowNumber == o.RowNumber && p.Column == "F2").FirstOrDefault().Value,
F3 = properties.Where(p => p.RowNumber == o.RowNumber && p.Column == "F3").FirstOrDefault().Value
}).ToList();
最佳答案
您几乎可以将 SQL 查询直接翻译成 LINQ:
// building data
var source = new ThisThing() { Cells = new List<Cell>() };
var f1 = new[] { "100", "200", "300", "400", "500", "100", "600", "700", "800", "100" };
var f2 = new[] { "A", "A", "A", "A", "A", "A", "A", "A", "A", "A" };
var f3 = new[] { "A", "A", "A", "A", "A", "B", "A", "A", "A", "A" };
for (int i = 1; i <= 10; i++) {
source.Cells.Add(new Cell() { RowNumber = i, ColumnName = "F1", ColumnValue = f1[i - 1] });
source.Cells.Add(new Cell() { RowNumber = i, ColumnName = "F2", ColumnValue = f2[i - 1] });
source.Cells.Add(new Cell() { RowNumber = i, ColumnName = "F3", ColumnValue = f3[i - 1] });
}
// normalize, same as in SQL query
// note we do not materialize query yet
var normalized = source.Cells.Select(c => new {
c.RowNumber,
F1 = c.ColumnName == "F1" ? c.ColumnValue : null,
F2 = c.ColumnName == "F2" ? c.ColumnValue : null,
F3 = c.ColumnName == "F3" ? c.ColumnValue : null
});
// flatten, again literal transaction
// still query is not executed
var flattened = normalized.GroupBy(c => c.RowNumber).Select(c => new {
RowNumber = c.Key,
F1 = c.Max(r => r.F1),
F2 = c.Max(r => r.F2),
F3 = c.Max(r => r.F3),
});
// again almost literal transaction
// at the end, query is finally executed with ToArray()
var result = flattened
.GroupBy(c => new { c.F1, c.F2, c.F3 })
.Where(c => c.Count() > 1)
.SelectMany(c => c.Select(r => r.RowNumber)).ToArray();
关于c# - 将 SQL 逻辑转换为 Performant LINQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49435980/
我正在尝试将一个字符串逐个字符地复制到另一个字符串中。目的不是复制整个字符串,而是复制其中的一部分(我稍后会为此做一些条件......) 但我不知道如何使用迭代器。 你能帮帮我吗? std::stri
我想将 void 指针转换为结构引用。 结构的最小示例: #include "Interface.h" class Foo { public: Foo() : mAddress((uint
这有点烦人:我有一个 div,它从窗口的左上角开始过渡,即使它位于文档的其他任何位置。我试过 usign -webkit-transform-origin 但没有成功,也许我用错了。有人可以帮助我吗?
假设,如果将 CSS3 转换/转换/动画分配给 DOM 元素,我是否可以检测到该过程的状态? 我想这样做的原因是因为我正在寻找类似过渡链的东西,例如,在前一个过渡之后运行一个过渡。 最佳答案 我在 h
最近我遇到了“不稳定”屏幕,这很可能是由 CSS 转换引起的。事实上,它只发生在 Chrome 浏览器 上(可能还有 Safari,因为一些人也报告了它)。知道如何让它看起来光滑吗?此外,您可能会注意
我正在开发一个简单的 slider ,它使用 CSS 过渡来为幻灯片设置动画。我用一些基本样式和一些 javascript 创建了一支笔 here .注意:由于 Codepen 使用 Prefixfr
我正在使用以下代码返回 IList: public IList FindCodesByCountry(string country) { var query =
如何设计像这样的操作: 计算 转化 翻译 例如:从“EUR”转换为“CNY”金额“100”。 这是 /convert?from=EUR&to=CNY&amount=100 RESTful 吗? 最佳答
我使用 jquery 组合了一个图像滚动器,如下所示 function rotateImages(whichHolder, start) { var images = $('#' +which
如何使用 CSS (-moz-transform) 更改一个如下所示的 div: 最佳答案 你可以看看Mozilla Developer Center .甚至还有例子。 但是,在我看来,您的具体示例不
我需要帮助我正在尝试在选中和未选中的汉堡菜单上实现动画。我能够为菜单设置动画,但我不知道如何在转换为 0 时为左菜单动画设置动画 &__menu { transform: translateX(
我正在为字典格式之间的转换而苦苦挣扎:我正在尝试将下面的项目数组转换为下面的结果数组。本质上是通过在项目第一个元素中查找重复项,然后仅在第一个参数不同时才将文件添加到结果集中。 var items:[
如果我有两个定义相同的结构,那么在它们之间进行转换的最佳方式是什么? struct A { int i; float f; }; struct B { int i; float f; }; void
我编写了一个 javascript 代码,可以将视口(viewport)从一个链接滑动到另一个链接。基本上一切正常,你怎么能在那里看到http://jsfiddle.net/DruwJ/8/ 我现在的
我需要将文件上传到 meteor ,对其进行一些图像处理(必要时进行图像转换,从图像生成缩略图),然后将其存储在外部图像存储服务器(s3)中。这应该尽可能快。 您对 nodejs 图像处理库有什么建议
刚开始接触KDB+,有一些问题很难从Q for Mortals中得到。 说,这里 http://code.kx.com/wiki/JB:QforMortals2/casting_and_enumera
我在这里的一个项目中使用 JSF 1.2 和 IceFaces 1.8。 我有一个页面,它基本上是一大堆浮点数字段的大编辑网格。这是通过 inputText 实现的页面上的字段指向具有原始值的值对象
ScnMatrix4 是一个 4x4 矩阵。我的问题是什么矩阵行对应于位置(ScnVector3),旋转(ScnVector4),比例(ScnVector3)。第 4 行是空的吗? 编辑: 我玩弄了
恐怕我是 Scala 新手: 我正在尝试根据一些简单的逻辑将 Map 转换为新 Map: val postVals = Map("test" -> "testing1", "test2" -> "te
输入: This is sample 1 This is sample 2 输出: ~COLOR~[Green]This is sample 1~COLOR~[Red]This is sam
我是一名优秀的程序员,十分优秀!