我有一个包含
等数据的表格Date Users
------------------
01/03/2015 25
02/03/2015 28
04/03/2015 36
07/03/2015 45
08/03/2015 47
我使用Row_Number在Sql Server中创建了一个表值函数,它给出了我用于进一步处理的输出,如下所示
Date Users UsersAdded
----------------------------------
01/03/2015 25 0
02/03/2015 28 3
04/03/2015 36 8
07/03/2015 45 9
08/03/2015 47 2
但是,我现在需要在Linq中做同样的事情,但它没有Row_Number函数。我查看了How do I translate a query that uses ROW_NUMBER() into linq?,但这与我的查询无关。
我在SQL中的查询在日期字段上有Rownum,查询是
select date, Users, (T1.Users - isnull(T2.Users,0)) as UsersAdded
from tableuser T1
join tableuser T2 on T1.Rownum = (T2.RowNum +1)
我是LINQ的新手,所以甚至不知道如何开始这个查询。任何帮助将不胜感激。
答案 0 :(得分:0)
使用日期列,使用from
/ where
按左外连接查找下一个最低日期。
var ans = from t1 in tableuser from t2 in tableuser.Where(t2 => t2.Date == tableuser.Where(t3 => t3.Date < t1.Date).Max(t3 => t3?.Date)).DefaultIfEmpty()
select new { t1.Date, t1.Users, UsersAdded = t1.Users - (t2?.Users ?? t1.Users)};
PS我认为您的示例查询可能与第一个答案行存在问题?
答案 1 :(得分:-4)
使用LINQ来对象。 请参阅链接https://msdn.microsoft.com/en-us/library/bb534869.aspx
它会像这样实现
string[] fruits = { "apple", "banana", "mango", "orange",
"passionfruit", "grape" };
var query =
fruits.Select((fruit, index) =>
new { index, str = fruit.Substring(0, index) });
foreach (var obj in query)
{
Console.WriteLine("{0}", obj);
}
/*
This code produces the following output:
{index=0, str=}
{index=1, str=b}
{index=2, str=ma}
{index=3, str=ora}
{index=4, str=pass}
{index=5, str=grape}
*/