使用LINQ将实体与数组进行比较

时间:2014-02-17 10:23:11

标签: c# arrays linq entity-framework

我有一个名为string array的{​​{1}},其中包含batchnames。我想将它与batches进行比较,并获取与实体的batchName字段匹配的所有记录。我正在使用Batch entity

Entity Framework 6

现在我正在使用class Batch { int batchId { get; set;} string batchname { get; set;} string info { get; set;} DateTime date { get; set;} }

这样做
foreach

如何使用foreach(var item in batches) { var res=opt.Batch.Where(i=>i.batchname==item).FirstOrDefault(); batchlist.Add(res); } 而不使用LINQ

来执行此操作

4 个答案:

答案 0 :(得分:4)

您可以替换整个foreach循环并保留2行代码,将i.batchname==item替换为以下内容:

batches.Contains(i.batchname)

然后,您可以一次性将所有项目添加到列表中,因为这将返回名称在批次数组中的所有批次。

变量res将返回一个枚举,然后可以循环以添加到列表中,或者您可以使用允许AddRange()的列表

希望这有帮助。

答案 1 :(得分:2)

如下:

var batchlist = opt.Batch.Where(x => batches.Contains(x.batchname)).ToList();

答案 2 :(得分:0)

下面的内容会有所帮助。

foreach(var item in batches)
{
  batchlist.AddRange(opt.Batch.Where(i=>i.batchname.Any(item => i.batchname==item)).ToList());
}

答案 3 :(得分:0)

这将为您提供批处理对象列表:

var resultList = opt.Batch.Join(batches, left => left.batchname, right => right, (left, right) => left

将最后一个'左'更改为'右',将为您提供批名称的字符串列表

var resultList = opt.Batch.Join(batches, left => left.batchname, right => right, (left, right) => right