EF linq 在列表中查找其中 object.prop 1 是 object.prop 2 中的任何一个
EF linq Find in list where objectA.prop1 is any of objectB.prop2
我对无法执行的 linq 查询有一些疑问。就是找对象的事
考虑列表 (ListA),我想 select 字段 F20 的值在列表 (ListB) 中的所有行。对于这些项目中的每一项,我将用 "replacement value".
替换 "searched value"
//StringReplacer(SearchValue,ReplacementValue)
List<StringReplacer> ListB = new List<StringReplacer>();
ListB.Add(new StringReplacer("JAN", "24/01/2015"));
ListB.Add(new StringReplacer("FEB", "24/02/2015"));
ListB.Add(new StringReplacer("MAR", "24/03/2015"));
ListB.Add(new StringReplacer("APR", "24/04/2015"));
List<XLS2015> ListA = new List<XLS2015>();
ListA = db.XLS2015.Where(y => (ListB.Any(y.F20.Any(tt => tt.SearchValue.Contains)))).ToList();
ListA = db.XLS2015.Where(y => (ListB.Any(y.F20.Contains(tt => tt.Source)))).ToList();
我可以用 foreach 做到这一点,但我认为 linq 语句会更好。
ListBis
List`:
我已经实现了
ListA = ListA.Where(c => (ListB.Any(c.F20.ToString().Contains))).ToList();
但我不知道如何处理对象的属性...
作为一个额外的问题,除了搜索值(Any()
、Contains()
)之外,是否有任何函数可以一次“SearchAndReplace
”?
您只能 select 在 DB 端,并在 .NET 端替换。您仍然可以在单个 LINQ 查询中执行此操作,但它只会在 SQL.
上部分执行
你可以试试这个:
// To make it easier to create sql query put all search string in array
string[] search = ListB.Select(b => b.Search).ToArray();
List<XLS2015> ListA = db.XLS2015
.Where(a => search.Contains(a.F20))
.AsEnumerable() // execute on server at this point, and do rest in C#
.Join(ListB, a => a.F20, b => b.Search, (a, b) => new { A = a, B = b })
.Select(x => {
// do replacement
x.A.F20 = x.A.F20.Replace(x.B.Search, x.B.Replacement);
return x.A;
})
.ToList();
我对无法执行的 linq 查询有一些疑问。就是找对象的事
考虑列表 (ListA),我想 select 字段 F20 的值在列表 (ListB) 中的所有行。对于这些项目中的每一项,我将用 "replacement value".
替换 "searched value"//StringReplacer(SearchValue,ReplacementValue)
List<StringReplacer> ListB = new List<StringReplacer>();
ListB.Add(new StringReplacer("JAN", "24/01/2015"));
ListB.Add(new StringReplacer("FEB", "24/02/2015"));
ListB.Add(new StringReplacer("MAR", "24/03/2015"));
ListB.Add(new StringReplacer("APR", "24/04/2015"));
List<XLS2015> ListA = new List<XLS2015>();
ListA = db.XLS2015.Where(y => (ListB.Any(y.F20.Any(tt => tt.SearchValue.Contains)))).ToList();
ListA = db.XLS2015.Where(y => (ListB.Any(y.F20.Contains(tt => tt.Source)))).ToList();
我可以用 foreach 做到这一点,但我认为 linq 语句会更好。
ListBis
List`:
ListA = ListA.Where(c => (ListB.Any(c.F20.ToString().Contains))).ToList();
但我不知道如何处理对象的属性...
作为一个额外的问题,除了搜索值(Any()
、Contains()
)之外,是否有任何函数可以一次“SearchAndReplace
”?
您只能 select 在 DB 端,并在 .NET 端替换。您仍然可以在单个 LINQ 查询中执行此操作,但它只会在 SQL.
上部分执行你可以试试这个:
// To make it easier to create sql query put all search string in array
string[] search = ListB.Select(b => b.Search).ToArray();
List<XLS2015> ListA = db.XLS2015
.Where(a => search.Contains(a.F20))
.AsEnumerable() // execute on server at this point, and do rest in C#
.Join(ListB, a => a.F20, b => b.Search, (a, b) => new { A = a, B = b })
.Select(x => {
// do replacement
x.A.F20 = x.A.F20.Replace(x.B.Search, x.B.Replacement);
return x.A;
})
.ToList();