【发布时间】:2018-03-12 12:03:34
【问题描述】:
因此,对于我得到的分配,我必须将通过 API 获得的数据转换为对象并将该对象保存在数据库中。由于该对象没有任何唯一的属性,因此我的数据库中有多个主键列。
所以我基本上必须做的是从我的数据库“合并”,所以如果数据已更改为更新,如果数据是新的,请执行插入。出于某种原因,我对此的 linq 查询给出了错误。
我的代码:
public void Insert(List<MEDSU1> medsu1s)
{
var keys = medsu1s.Select(y => new { SUPP = y.S1SUPP?.Trim() ?? null, COMP = y.S1COMP?.Trim() ??null }).ToList();
List<MEDSU1> medusFromSql = MediusDataContext.MEDSU1s.Where(y =>
keys.Any(z => z.SUPP == y.S1SUPP && z.COMP == y.S1COMP)).ToList();
var toUpdate = from medsu1org in MediusDataContext.MEDSU1s
join sqlkeys in medusFromSql
on new
{
aa = medsu1org.S1COMP,
bb = medsu1org.S1SUPP
}
equals
new
{
aa = sqlkeys.S1COMP,
bb = sqlkeys.S1SUPP
}
select new
{
sql = medsu1org,
obj = sqlkeys,
};
toUpdate.ToList().ForEach(y =>
{
y.obj.S1COMP= y.sql.S1COMP;
y.obj.S1SUPP = y.sql.S1SUPP;
y.obj.S1SUNA = y.sql.S1SUNA;
y.obj.S1BAAC = y.sql.S1BAAC;
y.obj.S1VATN = y.sql.S1VATN;
y.obj.S1COUN = y.sql.S1COUN;
y.obj.S1PREF = y.sql.S1PREF;
y.obj.S1TAXD = y.sql.S1TAXD;
y.obj.S1CURR = y.sql.S1CURR;
y.obj.S1TYPE = y.sql.S1TYPE;
y.obj.S1ACNR = y.sql.S1ACNR;
y.obj.S1ACNM = y.sql.S1ACNM;
y.obj.S1EINV = y.sql.S1EINV;
y.obj.S1DLAY = y.sql.S1DLAY;
y.obj.S1TERM = y.sql.S1TERM;
y.obj.S1PYEE = y.sql.S1PYEE;
});
var toInsert = medsu1s.Except(toUpdate.Select(y => y.obj)).ToList();
MediusDataContext.MEDSU1s.InsertAllOnSubmit(toInsert);
MediusDataContext.SubmitChanges();
}
给我错误的代码部分是:
var keys = medsu1s.Select(y => new { SUPP = y.S1SUPP?.Trim() ?? null, COMP = y.S1COMP?.Trim() ??null }).ToList();
List<MEDSU1> medusFromSql = MediusDataContext.MEDSU1s.Where(y =>
keys.Any(z => z.SUPP == y.S1SUPP && z.COMP == y.S1COMP)).ToList();
我认为这与我错误地使用 .Any 并将其转换为列表有关,但我不知道如何修复它。有人可以解释一下我做错了什么吗?
我得到错误:“本地序列不能用于查询运算符的 LINQ to SQL 实现中,但包含运算符除外。”
【问题讨论】:
-
阅读 How to Ask 并将错误以及您对问题的研究包括在内。
-
For some reason one my linq queries for this is giving an error.关于错误的任何线索? -
在帖子中添加了错误。抱歉完全忘记了
-
尝试以下操作: List
medusFromSql = MediusDataContext.MEDSU1s.Where(y => keys.Any(z => z.SUPP == y.S1SUPP && z.COMP == y.S1COMP )).Select(x => new MEDSU1() {在此处添加类属性 s1comp = x.Field ("S1Comp") }).ToList(); -
?? null有点毫无意义,因为它的字面意思是“如果它为空,则用空替换”
标签: c# linq linq-to-sql