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的顺序是至关重要的

LINQ to SQL从结果中省略字段,但仍将其包含在where子句中

出现问题是因为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经验,所以我的回答是有限的专业知识