C# 如何将List转换为List?
我的问题是这个问题的一部分: 我从一张表格中收到一组id。我需要获取密钥,将它们转换为整数,然后从数据库中选择匹配的记录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
[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();