【问题标题】:Get Row Index in a list by using entity framework使用实体框架获取列表中的行索引
【发布时间】:2013-11-28 07:05:25
【问题描述】:

我的列表中有 5 个数据。

我的列表

所以我想知道,我怎样才能获得选定的 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,所以它与键盘匹配。它是行数(索引)必须为“1”,因为 0 是计算机。

如何获取所选 ID 的行数(索引)?

【问题讨论】:

  • 行号是什么意思?您能否添加一些示例数据,说明您列表中的对象是什么样的?
  • 我更新了请检查

标签: c# entity-framework


【解决方案1】:

如果你的列表实现了indexer,你可以直接通过Index获取元素。你可以找到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,而第二种情况会给你一个 int 列表。

【讨论】:

    【解决方案2】:

    如果你想要计数,你需要分组

    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

    【讨论】:

    • SelectedDataRowNumber .Count 总是 1 我不知道为什么
    • 如果您使用SelectedDataRowNumber.Count(),如果您按 Id 分组并随后按 Id 过滤它,它将始终为 1。您想要的计数在结果集中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多