C#类型转换/ Linq

时间:2012-08-09 08:43:25

标签: c# linq shared

我们目前有几个基础数据库表,例如EventsShop Products,内容页面等,每个表都有共享属性,例如名称,前面的详细信息页面网站的结尾,缩略图网址,活动标记等。

我正在尝试找出创建一类共享属性的最有效方法,这些属性可用于一般传递这些对象。一个例子可能是搜索结果页面。可以根据最初实际跨多个表的数据集合的名称进行搜索。

我正在努力使用继承,因为所有这些类都来自LINQ类,我不想开始编辑datacontext设计器以满足我的需要。

目前,LINQ classes上的每个部分类都包含一个SharedObject方法:

    public partial class Event
    {
        public SharedObject SharedObject
        {
           get
           {
            return new SharedObject(this);
           }
        }
     ...

对于事件,商店产品等重复此操作。共享对象类包含以下内容:

public class SharedObject
{
public string Reference { get; set; }
public string Name { get; set; }
public string ImageURL { get; set; }
public bool IsVisible { get; set; }
public bool IsAdminVisible { get; set; }
public string FrontEndDetailsURL { get; set; }
public string AdminDetailsURL { get; set; }
public object OriginalObject { get; set; }
public string ObjectDescription { get; set; }

public SharedObject(object originalObject)
{
    if (originalObject.GetType() == typeof(Event))
    {
        Event eventx = (Event)originalObject;

        Reference = eventx.Reference;
        Name = eventx.Name;
        ImageURL = eventx.ImageURL;
        IsVisible = eventx.IsActive && !Event.IsArchived;
        IsAdminVisible = !eventx.IsArchived;
        FrontEndDetailsURL = eventx.DetailsURL;
        AdminDetailsURL = eventx.AdminDetailsURL;
        OriginalObject = originalObject;
        ObjectDescription = "Event";
    }
    ....

这听起来像是一个合适的解决方案吗?

2 个答案:

答案 0 :(得分:0)

我认为传递共享对象的最有效方法是使用“责任链模式”Chain of responsibility

对于继承LINQ,您可以考虑使用IQueryable< T>。我希望它可以帮到你

答案 1 :(得分:0)

考虑使用界面。这更加灵活。

public interface ISharedObject
{
   string Reference { get; set; }
   string Name { get; set; }
   string ImageURL { get; set; }
   bool IsVisible { get; set; }
   bool IsAdminVisible { get; set; }
   string FrontEndDetailsURL { get; set; }
   string AdminDetailsURL { get; set; }
   object OriginalObject { get; set; }
   string ObjectDescription { get; set; }
}

public partial class Event : ISharedObject
{}