Red*_*Taz 0 c# sql linq linq-to-sql
基本上我正在尝试在LINQ to SQL中执行此操作;
SELECT DISTINCT a,b,c FROM table WHERE z=35
Run Code Online (Sandbox Code Playgroud)
我试过这个,(c#代码)
(from record in db.table
select new table {
a = record.a,
b = record.b,
c = record.c
}).Where(record => record.z.Equals(35)).Distinct();
Run Code Online (Sandbox Code Playgroud)
但是当我以这种方式从表对象中删除列z时,我得到以下异常;
绑定错误:在投影中找不到成员'table.z'.
我不能返回字段z,因为它会使我的明显无用.任何帮助表示赞赏,谢谢.
编辑:
这是一个更全面的例子,包括使用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();
Run Code Online (Sandbox Code Playgroud)
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();
Run Code Online (Sandbox Code Playgroud)
选择后面的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();
Run Code Online (Sandbox Code Playgroud)