将列表添加到SQL数据库(实体数据库)

时间:2016-01-07 18:28:32

标签: c# sql

我有一个成员数据库,每个成员都有他们所做的运动列表。 现在我想循环一个列表框并将每个选定的项目添加到我的数据库中。

这是我的数据库:

enter image description here

这是我的代码:

foreach (var item in sportCheckedListBox.CheckedIndices)
            {
                int sportindex = Convert.ToInt32(item.ToString()) + 1;
                var queryResult = from sp in context.Sports
                                  where sp.sportnr == sportindex
                                  select sp;
                foreach (var sport in queryResult)
                {
                    myMember.Sports.Add(sport);
                }
            }

这看起来有点阴暗',我怎么能做得更好?

3 个答案:

答案 0 :(得分:0)

我认为你可以做AddRange

myMember.Sports.AddRange(queryResult);
myMember.Sports.SaveChanges()

如果不是queryResult类型,您可能需要将IEnumerable转换为cl::Program::build()类型。

答案 1 :(得分:0)

您的方法没有任何根本性的错误,但您可以使用Linq更简洁地实现它。

如果您总是想要分配新列表,而不是foreach循环,则可以使用

myMember.Sports = queryResult.ToList();

如果您想将结果连接到现有列表,可以使用

myMember.Sports = myMember.Sports.Concat(queryResult.ToList());

如果您想要执行与上面相同的操作,但没有任何重复项(由您要添加的对象定义),而是

myMember.Sports = myMember.Sports.Union(queryResult.ToList());

答案 2 :(得分:0)

我确实做的一件事就是将查询移出循环。出于性能和可维护性的原因,查询不应存在于循环中。 LINQ知道如何将(new int[] { 0, 1, 2, ... }).Contains(column)构造转换为WHERE column IN (0, 1, 2, ...)语句,所以让我们使用它:

// Get all checked items together
var lookupIndices = sportCheckedListBox.CheckedIndices.Select(i => Convert.ToInt32(item.ToString()) + 1);

// Find all matching sport numbers
var queryResult = from sp in context.Sports
                  where lookupIndices.Contains(sp.sportnr)
                  select sp;

// Now loop over the results
foreach (var sport in queryResult)
{
    myMember.Sports.Add(sport);
}

// save changes