使用实体框架在列表中获取行索引

时间:2013-11-28 07:05:26

标签: c# entity-framework

我的列表中有5个数据。

MYLIST

所以我想知道,我怎样才能选择Id的行号?

var MyProductId= 135;
var SelectedDataRowNumber = context.SP_MyList.ToList()
                                   .Where(s=>s.Id==MyProductId)
                                   .FirstOrDefault();

例如, 我的列表有5个数据如下,

Id-Name

6,Computer

135,KeyBoard

68,Mouse

98,Telephone

213,Laptop,

MyProductId135,因此它与Keyboard匹配。行数(索引)必须为“1”,因为0为计算机。

如何选择Id的行数(索引)编号?

2 个答案:

答案 0 :(得分:4)

如果列表已实现索引器,则可以通过索引直接获取元素。你可以找到How to implement Indexer

另一种方式可以如Here中所述。

以上链接显示如下:

从上方链接:

Person agedTwenty = myList.Where<Person>( x => return x.Age == 20; ).Single<Person>();
int index = myList.IndexOf(agedTwenty);

或者

int index = myList.Where<Person>( x => return x.Age == 20; ).Select<Person,int>( x =>         
myList.IndexOf(x)).Single<int>();

如果可以有多个结果,你可以这样做:

IEnumerable<Person> allAgedTwenty = myList.Where<Person>( x => return x.Age == 20; );
IEnumerable<int> indices = allAgedTwenty.Select<Person,int>( x => myList.IndexOf(x) );

第一种情况只会给你一个int,第二种情况会给你一个整数列表。

答案 1 :(得分:1)

如果你想要计数你需要groupBy

var SelectedDataRowNumber = context.SP_MyList.ToList()
                                   .GroupBy(x = x.Id)
                                   .Where(s=>s.Key == MyCustomerId )
                                   .Select(x => new {Id = x.Key, Count = x.Count()});

这为您提供了输出

Id = 135
Count = 3 //depending on the actual count

备选解决方案,如果要输出id,name和count:

//"items" is my custom list I created to reflect your data
var SelectedDataRowNumber = from x in items 
                            group x by new {x.Id, x.Name} into g
                            where g.Key.Id == 135
                            select new 
                            {
                                ID = g.Key.Id, 
                                Name = g.Key.Name, 
                                Count = g.Count()
                            };

关于您的评论:这是您期望的结果:http://abload.de/img/so1j5rta.jpg