2

たとえば、Product というリストがあり、ProductName (タイトル)、ProductPrice、ProductType の 3 つの列があります。

  • ProductName は文字列です
  • ProductPrice は通貨です (double)
  • ProductType は ProductTypes リストのルックアップです

通常、ルックアップ列が含まれていない場合、これは簡単ですが、挿入時にルックアップ列を処理する方法がわかりません。

これを試してみましたが、エラーが返されますSpecified cast is not valid.

これが現在のコードです

EntityList<ProductTypeItem> ProductTypes = dc.GetList<ProductTypeItem>("ProductType");

ProductItem newProduct = new ProductItem();

newProduct.Title = txtProductName.Text;
newProduct.ProductPrice = double.Parse(txtProductPrice.Text); 
newProduct.ProductType = (from a in ProductTypes where a.Title == ddProductType.SelectedItem.Text select a).FirstOrDefault();

dc.Product.InsertOnSubmit(newProduct);
dc.SubmitChanges();   

newProduct.ProductTypeここでエラーが発生するので、どうしますか。

ddProductType DataSource はProductType リストTitleであり、その中で使用するDataTextFieldことに注意してください。DataValueField

4

5 に答える 5

1

これはあなたを助けるかもしれません。最初の例は、挿入が既存のデータへのリンクでどのように機能するかを説明しています。このサンプル コードは、問題を解決するのに役立つ十分なヒントを提供するはずです。

AdventureWorksDataContext db = new AdventureWorksDataContext();

// LINQ query to get StateProvince
StateProvince state = (from states in db.StateProvinces
                       where states.CountryRegionCode == "AU" && states.StateProvinceCode == "NSW"
                       select states).FirstOrDefault();
// LINQ function to get AddressType
AddressType addrType = db.AddressTypes.FirstOrDefault(s => s.Name == "Home");

Customer newCustomer = new Customer()
{
    ModifiedDate= DateTime.Now,
    AccountNumber= "AW12354", 
    CustomerType='I',
    rowguid= Guid.NewGuid(),
    TerritoryID= state.TerritoryID    // Relate record by Keys
};
Contact newContact = new Contact()
{
    Title = "Mr",
    FirstName = "New",
    LastName = "Contact",
    EmailAddress = "newContact@company.com",
    Phone = "(12) 3456789", 
    PasswordHash= "xxx",
    PasswordSalt= "xxx",
    rowguid = Guid.NewGuid(),
    ModifiedDate = DateTime.Now
};
Individual newInd = new Individual()
{
    Contact= newContact,    // Relate records by objects (we dont actually know the Keys for the new records yet)
    Customer= newCustomer,
    ModifiedDate= DateTime.Now
};
Address newAddress = new Address()
{
    AddressLine1= "12 First St",
    City= "Sydney",
    PostalCode= "2000", 
    ModifiedDate=DateTime.Now,
    StateProvince= state,
    rowguid = Guid.NewGuid()
};

// Link our customer with their address via a new CustomerAddress record
newCustomer.CustomerAddresses.Add(new CustomerAddress() { Address = newAddress, Customer = newCustomer, AddressType = addrType, ModifiedDate = DateTime.Now, rowguid = Guid.NewGuid() });

// Save changes to the database
db.SubmitChanges();
于 2011-03-02T23:30:39.067 に答える
0

現在は機能しており、ここに解決策があります

EntityList<Item> ProductTypes = dc.GetList<Item>("ProductType");
Item oProductType = (from a in ProductTypes where a.Title == ddProductType.SelectedItem.Text select a).FirstOrDefault();
ProductItem newProduct = new ProductItem();

newProduct.Title = txtProductName.Text;
newProduct.ProductPrice = double.Parse(txtProductPrice.Text);
newProduct.ProductType = (ProductTypeItem)oProductType;

dc.Product.InsertOnSubmit(newProduct);
dc.SubmitChanges();   

私が変更した唯一のことは、製品タイプをItemではなくとして初期化し、ProductTypeItemそれを ProductTypeItem にキャストすることです。

于 2011-03-03T20:11:38.410 に答える
0

Linq to SharePointには詳しくありませんが、クライアント オブジェクト モデルに似ていると思います。その場合、の値にFieldLookupValuenewProduct.ProductTypeを使用しID、ルックアップの を値として使用する必要があります。

newProduct.ProductType = new FieldLookupValue { LookupId = 1 };

ListIDこれは、クエリでルックアップ値にアクセスできる必要があることを意味しProductTypesます。

于 2011-03-02T23:41:23.983 に答える
0

LINQ to SharePoint で生成されたコードは、リストと同期していません。リストを再生成すればうまくいく - Paul Beck

于 2011-03-25T23:46:39.143 に答える
0

あなたのやり方は私には正しいようです。それは私が成功してきたのと同じ方法です。問題はルックアップ列にあると確信していますか? double は通貨の正しい型ですか? 多くの場合、通貨は double ではなく 10 進数として保存されます。

ちなみに、Entitylist を別途取得する必要はありません。SPMetal は、insertOnSubmit で既に使用しているものと同様に、省略形の dc.ProductType を作成します。すべての例がこれを行う理由がわかりません...

割り当てを少し分割して、もう一度デバッグしてみてください。すべてが正しいかどうかを確認してください。

ProductItem newProduct = new ProductItem();
string selectedProductType = ddProductType.SelectedItem.Text;
ProductTypeItem productType = (from a in dc.ProductType
                               where a.Title == selectedProductType
                               select a).FirstOrDefault();

newProduct.Title = txtProductName.Text;
newProduct.ProductPrice = decimal.Parse(txtProductPrice.Text); 
newProduct.ProductType = productType;

dc.Product.InsertOnSubmit(newProduct);
dc.SubmitChanges();

お役に立てれば

于 2011-03-03T14:27:44.757 に答える