LinqToSQL - чтение объекта только с определенными свойствами - PullRequest
1 голос
/ 06 июня 2009

Учитывая такую ​​таблицу:

Foo
  P1
  P2
  P3

Как я могу читать Foo только с P1? Моя реализация:

public Foo GetFooWithP1(int id)
{
     using (DbDataContext db = new DbDataContext())
     {
        var query =
            from f in db.Foos
            where f.Id == id
            select new
            {
                P1 = m.P1
            };

        var data = query.SingleOrDefault();

        return new Foo
        {
            P1 = data.P1
        };
    }
}

Есть ли альтернативы?

Ответы [ 2 ]

2 голосов
/ 06 июня 2009

Обратите внимание, что для одного столбца вы можете полностью избавиться от типа anon, и просто select f.P1, но я оставлю это, поскольку он масштабируется до 2/3 / etc столбцов ...

Как насчет:

    var query =
        (from f in db.Foos
        where f.Id == id
        select new { f.P1 }).AsEnumerable()
           .Select(row => new Foo { P1 = row.P1});

Главное разбить композицию; AsEnumerable() делает это для нас.

Я также написал некоторый код для DbLinq, который изначально поддерживает этот тип конструкции - он может работать на LINQ-to-SQL; это где-то на usenet ...

Вы также можете использовать что-то вроде PropertyCopy() ( MiscUtil ), чтобы избежать необходимости отображать это самостоятельно:

var tmp = (from f in db.Foos
           where f.Id == id
           select new { f.P1 }).Single();
return PropertyCopy<Foo>.CopyFrom(tmp);
0 голосов
/ 07 июня 2009

Еще одно решение:

db.ExecuteQuery<Foo>("SELECT Id, P1 FROM Foos WHERE Id = {0}", id).Single();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...