Как добавить отличное значение в базе данных, используя Entity Framework - PullRequest
0 голосов
/ 25 февраля 2020
IEnumerable<WebsiteWebPage> data = GetWebPages();

foreach (var value in data)
{
    if (value.WebPage.Contains(".htm"))
    {
        WebsiteWebPage pagesinfo = new WebsiteWebPage();
        pagesinfo.WebPage = value.WebPage;
        pagesinfo.WebsiteId = websiteid;

        db.WebsiteWebPages.Add(pagesinfo);
    }
}
db.SaveChanges();

Я хочу добавить только отдельные значения в базу данных в приведенном выше коде. Пожалуйста, помогите мне, как это сделать, так как я не могу найти решение.

Ответы [ 5 ]

0 голосов
/ 25 февраля 2020

В дополнение к предоставленному примеру Furkan Öztürk, убедитесь, что в вашей БД есть ограничение, чтобы вы не могли вводить повторяющиеся значения в столбце. Пояс и подтяжки подходят.

0 голосов
/ 25 февраля 2020

Вы можете использовать следующий код,

IEnumerable<WebsiteWebPage> data = GetWebPages();

var templist = new List<WebsiteWebPage>();
foreach (var value in data)
{
    if (value.WebPage.Contains(".htm"))
    {
        WebsiteWebPage pagesinfo = new WebsiteWebPage();
        pagesinfo.WebPage = value.WebPage;
        pagesinfo.WebsiteId = websiteid;

        templist.Add(pagesinfo);
    }
}
var distinctList = templist.GroupBy(x => x.WebsiteId).Select(group => group.First()).ToList();
db.WebsiteWebPages.AddRange(distinctList);
db.SaveChanges();

Или вы можете использовать MoreLINQ здесь , чтобы отфильтровать список по параметрам, например,

var res = tempList.Distinct(x=>x.WebsiteId).ToList();
db.WebsiteWebPages.AddRange(res);
db.SaveChanges();
0 голосов
/ 25 февраля 2020

Я предполагаю, что под «различными значениями» вы подразумеваете «различные value.WebPage значения» :

// get existing values (if you ever need this)
var existingWebPages = db.WebsiteWebPages.Select(v => v.WebPage);
// get your pages
var webPages = GetWebPages().Where(v => v.WebPage.Contains(".htm"));

// get distinct WebPage values except existing ones
var distinctWebPages = webPages.Select(v => v.WebPage).Distinct().Except(existingWebPages);
// create WebsiteWebPage objects
var websiteWebPages = distinctWebPages.Select(v =>
    new WebsiteWebPage { WebPage = v, WebsiteId = websiteid});

// save all at once
db.WebsiteWebPages.AddRange(websiteWebPages);
db.SaveChanges();
0 голосов
/ 25 февраля 2020
   IEnumerable<WebsiteWebPage> data = GetWebPages();

                        foreach (var value in data)
                        {
                            if (value.WebPage.Contains(".htm"))
                            {
                                var a = db.WebsiteWebPages.Where(i => i.WebPage == value.WebPage.ToString()).ToList();
                                if (a.Count == 0)
                                {
                                    WebsiteWebPage pagesinfo = new WebsiteWebPage();
                                    pagesinfo.WebPage = value.WebPage;
                                    pagesinfo.WebsiteId = websiteid;
                                    db.WebsiteWebPages.Add(pagesinfo);
                                    db.SaveChanges();
                                }
                            }
                        }

Это код, который я использовал для добавления отдельных данных. Надеюсь, это поможет

0 голосов
/ 25 февраля 2020

Предполагая, что вам нужно, чтобы они были уникальными для WebPage и WebSiteId

IEnumerable<WebsiteWebPage> data = GetWebPages();
foreach (var value in data)
{
    if (value.WebPage.Contains(".htm"))
    {
        WebsiteWebPage pagesinfo = new WebsiteWebPage();
        if (db.WebsiteWebPages.All(c=>c.WebPage != value.WebPage|| c.WebsiteId != websiteid))
        {
            pagesinfo.WebPage = value.WebPage;
            pagesinfo.WebsiteId = websiteid;
            db.WebsiteWebPages.Add(pagesinfo);
        }
     }
}
db.SaveChanges();

ОБНОВЛЕНИЕ

Для оптимизации этого (учитывая, что ваш таблица содержит гораздо больше данных, чем ваш текущий список), переопределите ваш класс equals в WebsiteWebPage, чтобы определить критерии уникальности, а затем:

var myWebsiteWebPages = data.select(x=> new WebsiteWebPage { WebPage = x.WebPage, WebsiteId = websiteid}).Distinct();
var duplicates = db.WebsiteWebPages.Where(x=> myWebsiteWebPage.Contains(x));
db.WebsiteWebPages.AddRange(myWebsiteWebPages.Where(x=> !duplicates.Contains(x)));

это один запрос к базе данных, чтобы получить ТОЛЬКО дубликаты, а затем удалить их из списка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...