Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在LinQ Lambda联接中检索索引_C#_.net_Linq_Linq To Sql_Lambda - Fatal编程技术网

C# 在LinQ Lambda联接中检索索引

C# 在LinQ Lambda联接中检索索引,c#,.net,linq,linq-to-sql,lambda,C#,.net,Linq,Linq To Sql,Lambda,我对所有的.Net内容都很陌生,只是想知道一些我想做的事情。 一段时间以来,我一直在使用LinQ Lambda查询返回带有Select语句的列表值,如下所示: var data = list.Select((x, i) => new { Index = i, // <--- this is what I need! Value = x.Value

我对所有的.Net内容都很陌生,只是想知道一些我想做的事情。 一段时间以来,我一直在使用LinQ Lambda查询返回带有
Select
语句的列表值,如下所示:

        var data = list.Select((x, i) =>
            new
            {
                Index = i,       // <--- this is what I need!
                Value = x.Value,
                Text = x.Text
            })
            .ToList();
var数据=列表。选择((x,i)=>
新的
{
Index=i,//x.Id,
y=>y.Id,
(x,y)=>new/您不能将
Select(Func)
与Linq to SQL一起使用。如果尝试执行第一个查询,您将看到NotSupportedException:

查询运算符“Select”使用了不支持的重载

您可以将此运算符与Linq to对象一起使用。只需使用
AsEnumerable()
调用将查询执行移动到内存。在第二次查询中,在收到连接结果并将执行移动到内存后,添加另一个投影:

 var data = DataBase.Table1
            .Join(DataBase.Table2,
                t1 => t1.Id,
                t2 => t2.Id,
                (t1, t2) => new { Value = t1.Id, Text = t2.Description }
            )
            .AsEnumerable() //otherwise next operator cannot be translated to SQL
            .Select((x,i) => new { x.Value, x.Text, Index = i})
            .OrderBy(x => x.Value)
            .ToList();
 var data = DataBase.Table1.AsEnumerable().Select((t1,i) => new { t1, i })
            .Join(DataBase.Table2.AsEnumerable().Select((t2,i) => new { t2, i }),
                  x1 => x1.t1.Id,
                  x2 => x2.t2.Id,
                  (x1, x2) => new { 
                      Value = x1.t1.Id, 
                      Text = x2.t2.Description,
                      Index1 = x1.i,
                      Index2 = x2.i
                  })
            .OrderBy(x => x.Value)
            .ToList();
更新:如果您想要t2的索引,那么您可以使用
GroupJoin
而不是
Join

 var data = DataBase.Table1
            .GroupJoin(DataBase.Table2,
                t1 => t1.Id,
                t2 => t2.Id,
                (t1, t2items) => new { Value = t1.Id, t2items }
            )
            .AsEnumerable() //otherwise next operator cannot be translated to SQL
            .SelectMany(x => x.t2items.Select((t2, i) => 
               new { x.Value, Text = t2.Description, Index = i}))
            .OrderBy(x => x.Value)
            .ToList();
如果需要两个索引,则将整个连接移动到内存:

 var data = DataBase.Table1
            .Join(DataBase.Table2,
                t1 => t1.Id,
                t2 => t2.Id,
                (t1, t2) => new { Value = t1.Id, Text = t2.Description }
            )
            .AsEnumerable() //otherwise next operator cannot be translated to SQL
            .Select((x,i) => new { x.Value, x.Text, Index = i})
            .OrderBy(x => x.Value)
            .ToList();
 var data = DataBase.Table1.AsEnumerable().Select((t1,i) => new { t1, i })
            .Join(DataBase.Table2.AsEnumerable().Select((t2,i) => new { t2, i }),
                  x1 => x1.t1.Id,
                  x2 => x2.t2.Id,
                  (x1, x2) => new { 
                      Value = x1.t1.Id, 
                      Text = x2.t2.Description,
                      Index1 = x1.i,
                      Index2 = x2.i
                  })
            .OrderBy(x => x.Value)
            .ToList();

你确定Linq to SQL可以将索引为SQL的
Select
转换为SQL吗?我想你的第一个查询不会工作。是的,很抱歉,第一个语句使用的是对象列表。我的困惑是,我通常使用的数据库表是由EntityFramework解析为对象的。我已经编辑了这个问题。问题是,最后所有的表都是IEnumerable列表,所以我认为一定有一个合适的方法来做!恐怕你的答案不是我想要的,我需要连接的内部选择中的索引。我编辑了我的问题。连接的内部选择返回单个项目。它没有任何索引。请澄清你想要的索引返回项目列表,那些与c匹配的项目内部联接的条件,如果它返回一个列表,它有一个索引。否。
join
返回单个项对-每个集合中一个。它不返回项列表。您想要什么索引-来自
Table1
t1
索引或来自
Table2
t2
索引?