C# 如何将List转换为List?

C# 如何将List转换为List?,c#,C#,我的问题是这个问题的一部分: 我从一张表格中收到一组id。我需要获取密钥,将它们转换为整数,然后从数据库中选择匹配的记录 [HttpPost] public ActionResult Report(FormCollection collection) { var listofIDs = collection.AllKeys.ToList(); // List<string> to List<int> List<Dinner> din

我的问题是这个问题的一部分:

我从一张表格中收到一组id。我需要获取密钥,将它们转换为整数,然后从数据库中选择匹配的记录

[HttpPost]
public ActionResult Report(FormCollection collection)
{
    var listofIDs = collection.AllKeys.ToList();  
    // List<string> to List<int>
    List<Dinner> dinners = new List<Dinner>();
    dinners= repository.GetDinners(listofIDs);
    return View(dinners);
}
使用Linq

List<string> listofIDs = collection.AllKeys.ToList();  
List<int> myStringList = listofIDs.Select(s => int.Parse(s)).ToList();
使用Linq:

var intList = stringList.Select(s => Convert.ToInt32(s)).ToList()

我认为这是最简单的方法:

var listOfStrings = (new [] { "4", "5", "6" }).ToList();
var listOfInts = listOfStrings.Select<string, int>(q => Convert.ToInt32(q));

我知道这是一个老帖子,但我认为这是一个很好的补充: 你可以用

以下是一个过滤无效INT的安全变体:

List<int> ints = strings
    .Select(s => Int32.TryParse(s, out int n) ? n : (int?)null)
    .Where(n => n.HasValue)
    .Select(n => n.Value)
    .ToList();

实现这一点的另一种方法是使用linq语句。建议的答案在.NetCore2.0中对我不起作用。不过,如果您使用的是较新的技术,下面的内容也可以使用

[HttpPost]
public ActionResult Report(FormCollection collection)
{
    var listofIDs = collection.ToList().Select(x => x.ToString());
    List<Dinner> dinners = new List<Dinner>();
    dinners = repository.GetDinners(listofIDs);
    return View(dinners);
}
什么?没有锥虫? 安全LINQ版本,用于过滤C 6.0及以下版本的无效INT:

List<int>  ints = strings
    .Select(s => { int i; return int.TryParse(s, out i) ? i : (int?)null; })
    .Where(i => i.HasValue)
    .Select(i => i.Value)
    .ToList();

Olivier Jacot Descombes的创意和C7.0版本值得称赞。

您可以通过LINQ使用它

yourEnumList.Select(s => (int)s).ToList()
     var selectedEditionIds = input.SelectedEditionIds.Split(",").ToArray()
                            .Where(i => !string.IsNullOrWhiteSpace(i) 
                             && int.TryParse(i,out int validNumber))
                            .Select(x=>int.Parse(x)).ToList();

对于这个简单的问题来说,这可能有点过头了。但是对于与Linq相关的Try-Do方法,我倾向于使用匿名类来获得更具表现力的代码。这与和的答案类似:


将字符串值转换为整数列表

var myString = "010"; 
int myInt;
List<int> B = myString.ToCharArray().Where(x => int.TryParse(x.ToString(), out myInt)).Select(x => int.Parse(x.ToString())).ToList();

我经常在lambda表达式中看到这种模式:x=>someMethodx。你知道你应该用某种方法来代替它。这样,您的示例就变成了listOfStrings.SelectConvert.ToInt32;。这可能更可读、更快、更短,而且我已经提到过更优雅吗?回答这个问题的其他人也是如此。我在省略箭头语法时出错了。工作原理:列表sss=新列表;IEnumerable test1=sss.Selectx=>Convert.ToInt32x;但事实并非如此:IEnumerable test2=sss.SelectConvert.ToInt32;该错误是String、int、int和string、select的int版本之间的模糊调用。考虑添加关于您的答案的一些文本解释,而不是仅提供代码。异常引发- LINQ到实体不识别方法“INT32 INDEXOFCHAR”方法,并且该方法不能翻译成存储表达式。净4。0@markthewizard1234如果您的ListofId是尚未执行的IQueryable,则会发生这种情况。在进行转换之前,先用ToList执行它:listofIDs.ToList.Selectint.Parse.tolisti我确信在2013年这是可行的,但对我来说不再有效。在下面使用linq语句添加了一个较新的选项。如果任何字符串实际上不是ints,这将引发异常。请参阅下面的安全版本@MichaelHornfeck第一个列表应该是可计算的,不需要分配第二个列表非常感谢!C 6.0的版本低于var intList=stringList.SelectConvert.ToInt32.ToListHi Patryk。欢迎来到StackOverflow。如果你能多写一点关于你发布的非常简洁的解决方案的描述,那就更好了。这是对这个网站上一个非常老的问题的回答,会被几个用户审查。对于TryParse来说似乎是相当浪费的,它给了你值,然后简单地将该值抛出窗口,然后进行解析。你基本上是双重分析。
List<int>  ints = strings
    .Select(s => { int i; return int.TryParse(s, out i) ? i : (int?)null; })
    .Where(i => i.HasValue)
    .Select(i => i.Value)
    .ToList();
yourEnumList.Select(s => (int)s).ToList()
     var selectedEditionIds = input.SelectedEditionIds.Split(",").ToArray()
                            .Where(i => !string.IsNullOrWhiteSpace(i) 
                             && int.TryParse(i,out int validNumber))
                            .Select(x=>int.Parse(x)).ToList();
intList = Array.ConvertAll(stringList, int.Parse).ToList();
List<int> ints = strings
    .Select(idString => new { ParseSuccessful = Int32.TryParse(idString, out var id), Value = id })
    .Where(id => id.ParseSuccessful)
    .Select(id => id.Value)
    .ToList();
var myString = "010"; 
int myInt;
List<int> B = myString.ToCharArray().Where(x => int.TryParse(x.ToString(), out myInt)).Select(x => int.Parse(x.ToString())).ToList();