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 语句会更好。

ListBisList`:

我已经实现了
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();