2013-11-28 66 views
2

我有5個數據在我的列表中。使用實體框架在列表中獲取行索引

MYLIST

所以我想知道,我如何能得到選擇的ID的行號?

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

作爲實例, 列表有5個DATAS像下面,

Id-Name 

6,Computer 

135,KeyBoard 

68,Mouse 

98,Telephone 

213,Laptop, 

MyProductId135所以它與Keyboard.It配襯是行計數數(索引)必須是 「1」,因爲0是計算機。

我該如何獲得選定ID的行數(索引)數量?

+0

你是什麼意思的行號?您可以添加一些示例數據,列表中的對象是什麼樣的? – Marco

+0

我更新請檢查 – user3042186

+0

重複http://stackoverflow.com/a/2471631/665689 – Ingo

回答

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

如果你想計數需要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,名稱和數量:

//"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

+0

SelectedDataRowNumber .Count總是1我不知道爲什麼 – user3042186

+0

如果你採取'SelectedDataRowNumber.Count()'它將永遠是1如果你按ID分組,然後通過Id過濾它。您想要的計數在結果集中。 – Marco