从内部为对象分配对象

时间:2012-03-30 18:07:04

标签: c# linq

我正在使用LINQ从数据库表中获取名为table1的数据 当使用LINQ时,创建了一个名为table1的类

我创建了一个部分类来为table1类添加功能

public partial class Table1
{
public Table1(int id)
{
    using (DBDataContext item = new DBDataContext())
        {
            var q = (from c in item.table1
                     where c.ID == id
                     select c).FirstOrDefault();
        }
}
}

现在我想将结果“q”分配给当前对象 我需要逐个分配它的属性吗? 还是有更快的东西??

4 个答案:

答案 0 :(得分:1)

是的,您需要按属性分配属性,因为查询的结果不是对象,而是IEnumerable<..something..>的某些对象。因此,您需要迭代值集合并将它们分配给对象的相应属性。

编辑

此时我会这样做:

public static Table1 TableFromId(int Id)
{
     using (DBDataContext item = new DBDataContext())
        {
            return  (from c in item.table1
                     where c.ID == id
                     select c).FirstOrDefault() as Table1;
        }
}

并在使用后

Table1 table = Table1.TableFromId(0);

答案 1 :(得分:1)

我通常要做的是让我的业务对象或视图模型有一个构造函数,它接受“DTO”作为参数,并从DTO设置对象的属性。您也可以创建一个映射器来执行此操作。

我会说查询本身和数据库访问应该在单独的“存储库”类或数据访问层中,而不是在对象本身中。

答案 2 :(得分:0)

你可以试试这个。实现ICopyable接口并从类似于此的对象进行复制。

public class Person: ICopyable<Person>
{
    public string Name {set; get;}
    public int Age {set; get;}

    public void  CopyFrom(Person otherObject)
    {
        if (otherObject != null)
        {
            Name = otherObject.Name;
            Age = otherObject.Age;
        }
    }

    public Table1(int id)
    {
        using (DBDataContext item = new DBDataContext())
        {
            var q = (from c in item.table1
                 where c.ID == id
                 select c).FirstOrDefault() as Person;
            if (q != null)
            {
                CopyFrom(q);
            }
        }
    }
}

public interface ICopyable<TType>
{
    void CopyFrom(TType otherObject);
}

答案 3 :(得分:0)

我建议你重构代码并创建一个静态方法,它直接返回所需的对象。我假设您的查询返回类型为Table1的对象。

public partial class Table1
{
     public static FromID(int id)
     {
         using (var context = new DBDataContext()) {
            return (Table1)(from c in context.table1
                            where c.ID == id
                            select c).FirstOrDefault();
         }
     }
}

然后你可以用

获得一个新对象
Table1 obj = Table1.FromID(17);

注意:由于您的查询返回Table1对象,因此无需创建新的Table1对象并为其分配查询返回的对象的属性。直接使用查询返回的对象!因此,您将需要一个静态方法,可以在不实例化类的情况下调用它。