澄清示例 我有一个用户数据库,由扫描Active Directory的脚本创建。它应用的一个领域是" ScanDate"字段,指示扫描何时发生。该脚本扫描多个Active Directory域。
目标:从数据库中获取IList,其中包含所有域的用户列表,但ScanDate是每个域的MAX(ScanDate)。
这可确保我获得每个域的最新数据。
似乎对我有用的SQL查询:
SELECT *
FROM ADScans a
WHERE a.ScanDate = (SELECT MAX(b.ScanDate) FROM ADScans b WHERE a.Domain = b.Domain) AND Enabled = 1
但是,无法在LINQ中表达
<击> e.g:击>
<击>类别|日期
Cat1 4/4/16
Cat2 | 16年4月4日
Cat3 | 16年4月4日
Cat1 | 16年4月3日
我希望有一个清单:
Cat1 | 16年4月4日
Cat2 | 16年4月4日
Cat3 | 16年4月4日
一些澄清
我希望每个类别返回多行 - MAX(日期)不会只给我一个。我希望获得每个类别的MAX(日期)的所有行。 击>
答案 0 :(得分:0)
您可以GroupBy
Domain
获取最大ScanDate
,然后只保留该日期的行。
对于这样的模型:
class ADScan
{
public int Domain { get; set; }
public DateTime ScanDate { get; set; }
}
您可以执行扫描:
var result = scans.GroupBy(s => s.Domain)
.SelectMany(g => g.Where(s => s.ScanDate == g.Max(d => d.ScanDate)));
这会生成一个集合,其中包含ScanDate
的最大Domain
次扫描。
答案 1 :(得分:0)
这样的事情应该有效:
var result =
list
//Group by Category
.GroupBy(x => x.Category)
//For each Category, select Category and max Date within the Category
//This would create an anonymous object, you could do a "new Entity" instead if you want
.Select(g => new {Category = g.Key, Date = g.Max(x => x.Date)})
.ToList();
答案 2 :(得分:0)
我是个白痴。
from u in this.db.ADScans
where u.ScanDate ==
(from s in this.db.ADScans where u.Domain == s.Domain select s.ScanDate).Max()
&& u.Enabled
select u;
答案 3 :(得分:0)
而不是使用 //in google apps script
function myFunction() {
var option =
{
"contentType" : "charset=euc-kr"
};
var response = UrlFetchApp.fetch("~~~url~~~", option);
Logger.log(response.getContentText());
}
,只需订购组中的项目并选择顶部项目:由于您订购了商品,因此保证是最高的商品:
Max()