メソッドにパラメーターとして渡される手動で並べ替えられたリスト (Web フォーム) をLinq クエリで保存する Save メソッドがあり、データベースから取得したのOrder プロパティを更新しようとしています (EF )リスト内の対応する値を使用します(おそらく、以下のコードでより明確になるでしょう):IEnumerable<VM_CategoryLabel>
public static void SaveFromList(IList<VM_CategoryLabelExtra> listTemplate)
{
int idCat = listTemplate.Select(x => x.IdCat).FirstOrDefault();
var test = (int)listTemplate.Where(z => z.Id == 8).Select(z => z.Order).FirstOrDefault();
using (var context = new my_Entities())
{
var requete = from x in context.arc_CatLabel
where x.ID_Categorie == idCat
orderby x.Sequence_Cat
select new VM_CategoryLabel
{
Id = x.ID_LabelPerso,
//Order = x.Sequence_Cat,
Order = (int)listTemplate.Where(z => z.Id == x.ID_LabelPerso).Select(z => z.Order).First(),
Label = x.arc_Label.Label,
Unit = x.arc_Label.Unit
};
context.SaveChanges();
}
}
「サブクエリ」が正しい値を取得するかどうかを確認するために「テスト」varを使用しましたが、実際にはそうなりますが、Select (コメント付きの Order 行) 内で Linq 式を使用すると、次のエラーが発生します。
タイプ「Namespace.Models.VM_CategoryLabelExtra」の定数値を作成できません。「このコンテキストでは、プリミティブ型と列挙型のみがサポートされています。
ここに私のクラスがあります:
public class VM_CategoryLabel
{
public int Id { get; set; }
public int Order { get; set; }
public string Label { get; set; }
public string Unit { get; set; }
public bool Checked { get; set; }
}
public class VM_CategoryLabelExtra
{
public int Id { get; set; }
public int IdCat { get; set; }
public int Order { get; set; }
public string Label { get; set; }
public string Unit { get; set; }
public bool Checked { get; set; }
}
それで、クエリ内のリストをクエリするべきではないと思いますか?では、2 つの値のリストを「一致」させるにはどうすればよいでしょうか。
また、反復変数が読み取り専用であるため、次のことも試しました (Linq クエリで置換した後: Order = x.Sequence_Cat)。どちらも機能していません。
foreach (var item in requete)
{
item.Order = listTemplate.Where(x => x.Id == item.Id).Select(x => x.Order).FirstOrDefault();
}
try
{
context.SaveChanges();