从内部为类指定一个对象

本文关键字:一个对象 内部 | 更新日期: 2023-09-27 18:29:29

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

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

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"分配给当前对象我需要一个接一个地分配它的属性吗?还是有更快的东西??

从内部为类指定一个对象

是的,您需要逐个属性分配它,因为您的查询结果不是对象,而是某个对象的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);

我通常要做的是让我的业务对象或视图模型有一个构造函数,它将"DTO"作为参数,并从DTO设置对象的属性。你也可以创建一个映射器来实现这一点

我想说,查询本身和数据库访问应该在一个单独的"Repository"类或数据访问层中,而不是在对象本身中。

你可以试试这个。实现一个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);
}

我建议您重构代码并创建一个静态方法,该方法直接返回所需的对象。我假设您的查询返回一个类型为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对象并为其分配查询返回的对象的属性是没有意义的。直接使用查询返回的对象!因此,您将需要一个静态方法,该方法可以在不实例化类的情况下调用。