2012-01-26 26 views
0

我讀過一些其他帖子,但他們沒有幫助。無法創建類型的常量值。只使用原始類型

CarPart是EF4 gened類

[EdmEntityTypeAttribute(NamespaceName="xxxx.Data.Domain.Model", Name="CarPart")] 
[Serializable()] 
[DataContractAttribute(IsReference=true)] 
public partial class CarPart : EntityObject 
{ 
    #region Factory Method 

    /// summary> 
    /// Create a new CarPart object. 
    /// </summary> 
    /// <param name="carPartId">Initial value of the CarPartId property.</param> 
    /// <param name="name">Initial value of the Name property.</param> 
    /// <param name="carPartTypeId">Initial value of the CarPartId property.</param> 
    public static CarPart CreateCarPart(global::System.Int32 carPartId, global::System.String name, global::System.Int32 carPartId) 
    { 
     CarPart carPart = new CarPart(); 
     carPart.CarPartId = carPartId; 
     carPart.Name = name; 
     carPart.CarPartTypeId = carPartTypeId; 
     return carPart; 
    } 

    #endregion 
    #region Primitive Properties 

    /// <summary> 
    /// No Metadata Documentation available. 
    /// </summary> 
    [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)] 
    [DataMemberAttribute()] 
    public global::System.Int32 CarPartId 
    { 
     get 
     { 
      return _CarPartId; 
     } 
     set 
     { 
      if (_CarPartId != value) 
      { 
       OnCarPartIdChanging(value); 
       ReportPropertyChanging("CarPartId"); 
       _CarPartId = StructuralObject.SetValidValue(value); 
       ReportPropertyChanged("CarPartIdId"); 
       OnCarPartIdChanged(); 
      } 
     } 
    } 
    private global::System.Int32 _CarPartId; 
    partial void OnCarPartIdChanging(global::System.Int32 value); 
    partial void OnCarPartIdChanged(); 

    /// <summary> 
    /// No Metadata Documentation available. 
    /// </summary> 
    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)] 
    [DataMemberAttribute()] 
    public global::System.String Name 
    { 
     get 
     { 
      return _Name; 
     } 
     set 
     { 
      OnNameChanging(value); 
      ReportPropertyChanging("Name"); 
      _Name = StructuralObject.SetValidValue(value, false); 
      ReportPropertyChanged("Name"); 
      OnNameChanged(); 
     } 
    } 
    private global::System.String _Name; 
    partial void OnNameChanging(global::System.String value); 
    partial void OnNameChanged(); 

    /// <summary> 
    /// No Metadata Documentation available. 
    /// </summary> 
    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)] 
    [DataMemberAttribute()] 
    public global::System.Int32 CarPartTypeId 
    { 
     get 
     { 
      return _CarPartTypeId; 
     } 
     set 
     { 
      OnCarPartTypeIdChanging(value); 
      ReportPropertyChanging("CarPartTypeId"); 
      _CarPartTypeId = StructuralObject.SetValidValue(value); 
      ReportPropertyChanged("CarPartTypeId"); 
      OnCarPartTypeIdChanged(); 
     } 
    } 
    private global::System.Int32 _CarPartTypeId; 
    partial void OnCarPartTypeIdChanging(global::System.Int32 value); 
    partial void OnCarPartTypeIdChanged(); 

    #endregion 

    #region Navigation Properties 

    /// <summary> 
    /// No Metadata Documentation available. 
    /// </summary> 
    [XmlIgnoreAttribute()] 
    [SoapIgnoreAttribute()] 
    [DataMemberAttribute()] 
    [EdmRelationshipNavigationPropertyAttribute("xxxx.Data.Domain.Model", "FK_CarPartId", "Part")] 
    public EntityCollection<Part> Parts 
    { 
     get 
     { 
      return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedCollection<Part>("xxxxx.Data.Domain.Model.FK_CarPartId", "Part"); 
     } 
     set 
     { 
      if ((value != null)) 
      { 
       ((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedCollection<Part>("xxxx.Data.Domain.Model.FK_CarPartId", "Part", value); 
      } 
     } 
    } 

    /// <summary> 
    /// No Metadata Documentation available. 
    /// </summary> 
    [XmlIgnoreAttribute()] 
    [SoapIgnoreAttribute()] 
    [DataMemberAttribute()] 
    [EdmRelationshipNavigationPropertyAttribute("xxxxx.Data.Domain.Model", "FK_CarPartTypeId", "CarPartType")] 
    public CarPartType CarPartType 
    { 
     get 
     { 
      return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<CarPartType>("xxxx.Data.Domain.Model.FK_CarPartTypeId", "CarPartType").Value; 
     } 
     set 
     { 
      ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<CarPartType>("xxxxx.Data.Domain.Model.FK_CarPartTypeId", "CarPartType").Value = value; 
     } 
    } 
    /// <summary> 
    /// No Metadata Documentation available. 
    /// </summary> 
    [BrowsableAttribute(false)] 
    [DataMemberAttribute()] 
    public EntityReference<CarPartType> CarPartTypeReference 
    { 
     get 
     { 
      return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<CarPartType>("xxxx.Data.Domain.Model.FK_CarPartTypeId", "CarPartType"); 
     } 
     set 
     { 
      if ((value != null)) 
      { 
       ((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedReference<CarPartType>("xxxxxx.Data.Domain.Model.FK_CarPartTypeId", "CarPartType", value); 
      } 
     } 
    } 

    #endregion 
} 

因此,這裏是我的加入代碼:

List<Parts> parts = _context.Parts.Where(p => p.PartId == partId).ToList(); 

List<CarParts> parts = _context.CarParts 
    .Join(parts, cp => cp.PartId, p => p.PartId, (cp, p) => cp).ToList(); 

Error: Unable to create a constant value of type 'Model.CarParts'. Only primitive types ('such as Int32, String, and Guid') are supported in this context.

想看看它,但不能讓過去這一點。我對LINQ-To-SQL有點新東西..做了一個相當數量但不是一噸(主要完成LINQ to Objects)的新人加入。

+0

我不知道* DL類*是什麼。你可以發佈'Model.Token'的代碼嗎? – Yuck

+0

數據層。 makup只是一個EF4(實體框架)gened類型。 – PositiveGuy

回答

0

,如果我理解正確的,你想要做這樣的事情:

internal class Db 
{ 
    public Db() 
    { 
     var parts = new List<Part> 
         { 
          new Part() {PartId = 1, PartName = "Part 1"}, 
          new Part() {PartId = 2, PartName = "Part 2"}, 
         }; 
     Parts = parts.AsQueryable(); 
     var carParts = new List<CarPart> 
          { 
           new CarPart() {CarPartId = 1, CarPartName = "Car Part 1.1", PartId = 1}, 
           new CarPart() {CarPartId = 1, CarPartName = "Car Part 1.2", PartId = 1}, 
           new CarPart() {CarPartId = 1, CarPartName = "Car Part 2.1", PartId = 2}, 
          }; 
     CarParts = carParts.AsQueryable(); 
    } 

    public IQueryable<Part> Parts { get; set; } 
    public IQueryable<CarPart> CarParts { get; set; } 
} 

internal class CarPart 
{ 
    public int CarPartId { get; set; } 
    public string CarPartName { get; set; } 
    public int PartId { get; set; } 
} 

internal class Part 
{ 
    public int PartId { get; set; } 
    public string PartName { get; set; } 
} 

    static void Main(string[] args) 
    { 
     Db db = new Db(); 

     var result = from carPart in db.CarParts 
        join part in db.Parts on carPart.PartId equals part.PartId 
        select new {Part = part, CarPart = carPart}; 

     var lambdaResult = db.CarParts.Join(db.Parts, part => part.PartId, caPart => caPart.PartId, 
              (carPart, part) => new {CarPart = carPart, Part = part}); 

     foreach (var item in result) 
     { 
      Console.WriteLine(item.Part.PartName); 
      Console.WriteLine(item.CarPart.CarPartName); 
     } 
     Console.WriteLine("------------"); 
     foreach (var item in lambdaResult) 
     { 
      Console.WriteLine(item.Part.PartName); 
      Console.WriteLine(item.CarPart.CarPartName); 
     } 
} 

的結果與加盟對象爲內容的新的匿名對象。 它會打印到控制檯:

Part 1 
Car Part 1.1 
Part 1 
Car Part 1.2 
Part 2 
Car Part 2.1 
-------  
Part 1 
Car Part 1.1 
Part 1 
Car Part 1.2 
Part 2 
Car Part 2.1 
+0

close我想要CarParts通過PartId加入Parts..so所有的CarParts都重新安裝到特定的PartId(是的,它倒退了,但這只是一個例子) – PositiveGuy

+0

所以我必須使用from語法?我試圖遠離它,因爲它對我來說很混亂......我喜歡更好的lambda語法 – PositiveGuy

+0

如果你願意,你可以把它轉換成lambda。對我來說,它更像是一個SQL查詢,我可以更好地獲取語句的內容。你的選擇;) – stylefish

相關問題