LINQ to SQL从结果中省略字段,但仍将其包含在where子句中
本文关键字:包含 子句 where SQL to 结果 中省 字段 LINQ | 更新日期: 2023-09-27 18:08:24
基本上我正在尝试在LINQ to SQL中做到这一点;
SELECT DISTINCT a,b,c FROM table WHERE z=35
我已经试过了,(c# code)
(from record in db.table
select new table {
a = record.a,
b = record.b,
c = record.c
}).Where(record => record.z.Equals(35)).Distinct();
但是当我以这种方式从表对象中删除列z时,我会得到以下异常;
绑定错误:Member 'table。投影中找不到Z
我不能返回字段z,因为它会使我的distinct无用。任何帮助都是感激的,谢谢。
编辑:这是一个更全面的例子,包括PredicateBuilder的使用,
var clause = PredicateBuilder.False<User>();
clause = clause.Or(user => user.z.Equals(35));
foreach (int i in IntegerList) {
int tmp = i;
clause = clause.Or(user => user.a.Equals(tmp));
}
var results = (from u in db.Users
select new User {
a = user.a,
b = user.b,
c = user.c
}).Where(clause).Distinct();
Edit2:
非常感谢每个人的评论和回答,这是我最终的解决方案,
var clause = PredicateBuilder.False<User>();
clause = clause.Or(user => user.z.Equals(35));
foreach (int i in IntegerList) {
int tmp = i;
clause = clause.Or(user => user.a.Equals(tmp));
}
var results = (from u in db.Users
select u)
.Where(clause)
.Select(u => new User {
a = user.a,
b = user.b,
c = user.c
}).Distinct();
Where后面跟着Select的顺序是至关重要的
出现问题是因为where子句在linq查询之外,并且在新的匿名数据类型上应用where子句,这导致错误
建议您更改查询,如
(from record in db.table
where record.z == 35
select new table {
a = record.a,
b = record.b,
c = record.c
}).Distinct();
你不能把WHERE子句放在LINQ中吗?
(from record in db.table
where record.z == 35
select new table {
a = record.a,
b = record.b,
c = record.c
}).Distinct();
或者,如果你一定要按照你写的那样,使用。select
。选择(r => new {a =r, a, b=r。b, c=r}).Distinct();
如下所示:LINQ Select Distinct with Anonymous Types,这个方法可以工作,因为它比较了所有匿名类型的公共属性。
希望这有帮助,不幸的是我没有太多的LINQ经验,所以我的回答是有限的专业知识